Преглед изворни кода

Merge branch 'hotfix/V8-3313' into develop

Olivier Massot пре 3 година
родитељ
комит
515f592ab8
29 измењених фајлова са 267 додато и 197 уклоњено
  1. 20 0
      doc/fe_users.md
  2. 3 5
      doc/installation.md
  3. 201 181
      ot_admin/Classes/Controller/SiteController.php
  4. 25 3
      ot_connect/Classes/Service/OtAuthenticationService.php
  5. 3 2
      ot_connect/ext_localconf.php
  6. 4 2
      ot_core/Classes/Domain/Repository/EventRepository.php
  7. 3 1
      ot_templating/Classes/ViewHelpers/Members/GetAllViewHelper.php
  8. 1 0
      ot_templating/Resources/Private/Layouts/Classic/StructureDetails.html
  9. 1 0
      ot_templating/Resources/Private/Layouts/Classic/Structures.html
  10. 1 0
      ot_templating/Resources/Private/Layouts/Modern/StructureDetails.html
  11. 2 1
      ot_templating/Resources/Private/Layouts/Modern/Structures.html
  12. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-blue.css
  13. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-blue.css.map
  14. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-green.css
  15. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-green.css.map
  16. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-grey.css
  17. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-grey.css.map
  18. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-light-blue.css
  19. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-light-blue.css.map
  20. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-light-red.css
  21. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-light-red.css.map
  22. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-orange.css
  23. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-orange.css.map
  24. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-purple.css
  25. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-purple.css.map
  26. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-red.css
  27. 0 0
      ot_templating/Resources/Public/assets/Classic/style/classic-red.css.map
  28. 1 0
      ot_templating/Resources/Public/assets/Classic/style/module/_forms.scss
  29. 2 2
      ot_templating/Resources/Public/assets/Classic/style/module/_structures.scss

+ 20 - 0
doc/fe_users.md

@@ -0,0 +1,20 @@
+# Frontend users
+
+Les frontend users sont les utilisateurs authentifiés du côté front.
+Un administrateur de site peut créer des pages et contenus réservées aux utilisateurs authentifiés.
+
+> Pour le fonctionnement de l'authentification, voir : [auth.md](auth.md)
+
+Lorsqu'un utilisateur opentalent, déjà connecté au logiciel, envoie une requête pour une page d'un site
+Typo3, le plugin ot_connect interroge l'API Opentalent pour vérifier si cet utilisateur est bien connecté.
+
+Si oui, un enregistrement est créé ou mis à jour dans la table 'fe_user' (le lien avec la DB Opentalent
+se fait via le champ fe_user.tx_opentalent_opentalentId). À noter que l'enregistrement du fe_user ne sera 
+mis à jour que si la dernière mise à jour remonte à plus de 300s.
+
+Ces fe_users seront affectés à des groupes 'Membres' (fe_group) correspondant à la ou les structures auxquelles 
+la personne a accès.
+
+Ces groupes sont associés via leur pid à un site.
+
+Un administrateur peut alors limiter l'accès à une page ou contenu aux membres de ce groupe.

+ 3 - 5
doc/installation.md

@@ -53,19 +53,17 @@ Sauvegarder les uploads et les définitions des formulaires (de l'ordre de la ce
 
 ### Mettre à jour Typo3
 
-
-
 Pour voir les dernières versions disponibles:
 
-    composer outdated
+    php composer.phar outdated
 
 Pour mettre à jour typo3:
 
-    composer update
+    php composer.phar update
 
 Pour tout mettre à jour:
 
-    composer update
+    php composer.phar update
 
 
 ### Synchroniser les données depuis prod-front sur preprod

Разлика између датотеке није приказан због своје велике величине
+ 201 - 181
ot_admin/Classes/Controller/SiteController.php


+ 25 - 3
ot_connect/Classes/Service/OtAuthenticationService.php

@@ -109,7 +109,6 @@ class OtAuthenticationService extends AbstractAuthenticationService
      */
     public function getUser()
     {
-
         // Does the user already have a session on the Opentalent API?
         $username = $this->getAuthenticatedUsername();
 
@@ -293,7 +292,6 @@ class OtAuthenticationService extends AbstractAuthenticationService
      */
     protected function createOrUpdateUser(): bool
     {
-
         // Get user's data from the API
         $userApiData = $this->getUserData();
 
@@ -315,12 +313,36 @@ class OtAuthenticationService extends AbstractAuthenticationService
             'name' => $userApiData['name'],
             'first_name' => $userApiData['first_name'],
             'description' => '[Warning: auto-generated record, do not modify] FE User',
-            'usergroup' => self::GROUP_FE_ALL_UID,
             'deleted' => 0,
             'tx_opentalent_opentalentId' => $userApiData['id'],
             'tx_opentalent_generationDate' => date('Y/m/d H:i:s')
         ];
 
+        $groupsUid = [self::GROUP_FE_ALL_UID];
+        if ($userApiData['accesses']) {
+            foreach ($userApiData['accesses'] as $accessData) {
+                $organizationId = $accessData['organizationId'];
+
+                // get the fe_group for this organization
+                $groupUid = $connection->fetchOne(
+                    "select g.uid
+                     from typo3.fe_groups g
+                     inner join (select uid, ot_website_uid from typo3.pages where is_siteroot) p 
+                     on g.pid = p.uid
+                     inner join typo3.ot_websites w on p.ot_website_uid = w.uid
+                     where w.organization_id=:organizationId;",
+                    ['organizationId' => $organizationId]
+                );
+
+                if ($groupUid) {
+                    $groupsUid[] = $groupUid;
+                } else {
+                    $this->writeLogMessage("Warning: no fe_group found for organization " . $organizationId);
+                }
+            }
+        }
+        $fe_row['usergroup'] = join(',', $groupsUid);
+
         // TODO: log a warning if a user with the same opentalentId exists (the user might have changed of username)
         $q = $connection->select(
             ['uid', 'tx_opentalent_opentalentId'],

+ 3 - 2
ot_connect/ext_localconf.php

@@ -20,8 +20,9 @@ defined('TYPO3_MODE') || die();
     ]
 );
 
-# Always call the getUser method if no session is active
-$GLOBALS['TYPO3_CONF_VARS']['SVCONF']['auth']['setup']['FE_fetchUserIfNoSession'] = true;
+# Always fetch FE user, since the previous one could have been disconnected from the Opentalent API since
+$GLOBALS['TYPO3_CONF_VARS']['SVCONF']['auth']['setup']['FE_alwaysFetchUser'] = true;
+$GLOBALS['TYPO3_CONF_VARS']['SVCONF']['auth']['setup']['FE_alwaysAuthUser'] = true;
 
 // Use popup window to refresh login instead of the AJAX relogin:
 $GLOBALS['TYPO3_CONF_VARS']['BE']['showRefreshLoginPopup'] = 1;

+ 4 - 2
ot_core/Classes/Domain/Repository/EventRepository.php

@@ -159,8 +159,10 @@ class EventRepository extends BaseApiRepository
         $event = new Event();
         $a = explode('/', $record['@id']);
         $event->setId(end($a));
-        $event->setOrganizationId($record['organizationId']);
-        $event->setSubdomain($record['subDomain']);
+        if ($record['organizationId'] !== null) {
+            $event->setOrganizationId($record['organizationId']);
+        }
+        $event->setSubdomain($record['subDomain'] ?? '');
         $event->setName($record['name']);
         $event->setDescription($record['description']);
         $event->setUrl($record['url']);

+ 3 - 1
ot_templating/Classes/ViewHelpers/Members/GetAllViewHelper.php

@@ -95,8 +95,10 @@ class GetAllViewHelper extends OtAbstractViewHelper {
                     return 1;
                 } else if ($a->getInstrument() != $b->getInstrument()) {
                     return strcmp($a->getInstrument(), $b->getInstrument());
-                } else {
+                } else if ($a->getName() != $b->getName()) {
                     return strcmp($a->getName(), $b->getName());
+                } else {
+                    return 0;
                 }
             }
         );

+ 1 - 0
ot_templating/Resources/Private/Layouts/Classic/StructureDetails.html

@@ -21,6 +21,7 @@
                     referrerpolicy="strict-origin"
                     style="border: none;"
                     onload="iFrameResize()"
+                    allow="geolocation"
             ></iframe>
         </div>
     </div>

+ 1 - 0
ot_templating/Resources/Private/Layouts/Classic/Structures.html

@@ -21,6 +21,7 @@
                     referrerpolicy="strict-origin"
                     style="border: none;"
                     onload="iFrameResize()"
+                    allow="geolocation"
             ></iframe>
         </div>
     </div>

+ 1 - 0
ot_templating/Resources/Private/Layouts/Modern/StructureDetails.html

@@ -21,6 +21,7 @@
                         referrerpolicy="strict-origin"
                         style="border: none;"
                         onload="iFrameResize()"
+                        allow="geolocation"
                 ></iframe>
             </div>
         </section>

+ 2 - 1
ot_templating/Resources/Private/Layouts/Modern/Structures.html

@@ -21,10 +21,11 @@
                         referrerpolicy="strict-origin"
                         style="border: none;"
                         onload="iFrameResize()"
+                        allow="geolocation"
                 ></iframe>
             </div>
         </section>
-
+<!---->
         <f:comment><!-- Render the footer defined in partial/footer.html--></f:comment>
         <f:render partial="Modern/Footer" />
     </div>

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-blue.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-blue.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-green.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-green.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-grey.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-grey.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-light-blue.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-light-blue.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-light-red.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-light-red.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-orange.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-orange.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-purple.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-purple.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-red.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
ot_templating/Resources/Public/assets/Classic/style/classic-red.css.map


+ 1 - 0
ot_templating/Resources/Public/assets/Classic/style/module/_forms.scss

@@ -82,6 +82,7 @@ span.submit {
 form button[type=submit] {
   min-width: 120px;
   background-color: $forms-btn-background-color;
+  color: #000000;
 }
 
 form button[type=submit]:hover {

+ 2 - 2
ot_templating/Resources/Public/assets/Classic/style/module/_structures.scss

@@ -3,9 +3,9 @@
 .ot-structures {
   iframe {
     border: none;
-    width: 100%;
+    width: 1px;
+    min-width: 100%;
     max-width: 100%;
-    height: 2400px;
   }
   @media screen and (min-width: 1100px) {
     iframe {

Неке датотеке нису приказане због велике количине промена