Browse Source

members and members_ca pages ok

Olivier Massot 5 years ago
parent
commit
5082fd3a8b
25 changed files with 370 additions and 18 deletions
  1. 10 0
      ot_templating/Configuration/TypoScript/setup.txt
  2. 42 0
      ot_templating/Resources/Public/assets/style/common/module/_members.scss
  3. 31 0
      ot_templating/Resources/Public/assets/style/style.css
  4. 0 0
      ot_templating/Resources/Public/assets/style/style.css.map
  5. 4 0
      ot_templating/Resources/Public/assets/style/style.scss
  6. 31 0
      ot_templating/Resources/Public/assets/style/theme-blue.css
  7. 0 0
      ot_templating/Resources/Public/assets/style/theme-blue.css.map
  8. 31 0
      ot_templating/Resources/Public/assets/style/theme-green.css
  9. 0 0
      ot_templating/Resources/Public/assets/style/theme-green.css.map
  10. 31 0
      ot_templating/Resources/Public/assets/style/theme-grey.css
  11. 0 0
      ot_templating/Resources/Public/assets/style/theme-grey.css.map
  12. 31 0
      ot_templating/Resources/Public/assets/style/theme-light-blue.css
  13. 0 0
      ot_templating/Resources/Public/assets/style/theme-light-blue.css.map
  14. 31 0
      ot_templating/Resources/Public/assets/style/theme-light-red.css
  15. 0 0
      ot_templating/Resources/Public/assets/style/theme-light-red.css.map
  16. 31 0
      ot_templating/Resources/Public/assets/style/theme-orange.css
  17. 0 0
      ot_templating/Resources/Public/assets/style/theme-orange.css.map
  18. 31 0
      ot_templating/Resources/Public/assets/style/theme-purple.css
  19. 0 0
      ot_templating/Resources/Public/assets/style/theme-purple.css.map
  20. 31 0
      ot_templating/Resources/Public/assets/style/theme-red.css
  21. 0 0
      ot_templating/Resources/Public/assets/style/theme-red.css.map
  22. 28 13
      ot_widgets/Classes/Controller/MemberController.php
  23. 3 1
      ot_widgets/Classes/Domain/Repository/BaseApiRepository.php
  24. 3 3
      ot_widgets/Classes/Domain/Repository/MemberRepository.php
  25. 1 1
      ot_widgets/Resources/Private/Templates/Member/GetMembersCa.html

+ 10 - 0
ot_templating/Configuration/TypoScript/setup.txt

@@ -59,6 +59,11 @@ lib.members {
     vendorName = Opentalent
     controller = Member
     action = getMembers
+    switchableControllerActions {
+        Member {
+            1 = getMembers
+        }
+    }
     settings < plugin.tx_otwidgets_members.settings
 }
 
@@ -70,6 +75,11 @@ lib.members_ca {
     vendorName = Opentalent
     controller = Member
     action = getMembersCa
+    switchableControllerActions {
+        Member {
+            1 = getMembersCa
+        }
+    }
     settings < plugin.tx_otwidgets_members.settings
 }
 

+ 42 - 0
ot_templating/Resources/Public/assets/style/common/module/_members.scss

@@ -0,0 +1,42 @@
+// Members and MembersCa pages
+$otmembers-font-color: $otmembers-font-color;
+$otmembers-background-color: $otmembers-background-color;
+
+.ot-members {
+
+  h3 {
+    color: $otmembers-font-color;
+    background-color: $otmembers-background-color;
+    text-align: center;
+    font-weight: bold;
+    height: 18px;
+    padding: 6px;
+  }
+
+  .ot-members-list {
+    list-style: none;
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    align-items: end;
+    justify-content: center;
+  }
+
+  .ot-member {
+    margin: 15px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+  }
+
+  .ot-member img {
+    max-width: 120px;
+    max-height: 150px;
+    height: auto;
+  }
+
+  .ot-member-name {
+    text-align: center;
+  }
+
+}

+ 31 - 0
ot_templating/Resources/Public/assets/style/style.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/style.css.map


+ 4 - 0
ot_templating/Resources/Public/assets/style/style.scss

@@ -34,6 +34,9 @@ $otbox-header-font-color: #4facc6 !default;
 $otbox-header-font-size: 1.2em !default;
 $otbox-header-font-weight: bold !default;
 
+$otmembers-font-color: #ffffff !default;
+$otmembers-background-color: #adaeae !default;
+
 $content-h1-color: #4facc6 !default;
 $content-h1-size: 1.6em !default;
 $content-h1-weight: 500 !default;
@@ -84,6 +87,7 @@ $warning-font-color: #ffffff !default;
 "common/module/_events-index",
 "common/module/_events-show",
 "common/module/_donors-box",
+"common/module/_members",
 "common/module/_sitemap",
 "common/module/_forms",
 "common/module/_contact",

+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-blue.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-blue.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-green.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-green.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-grey.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-grey.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-light-blue.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-light-blue.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-light-red.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-light-red.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-orange.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-orange.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-purple.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-purple.css.map


+ 31 - 0
ot_templating/Resources/Public/assets/style/theme-red.css

@@ -902,6 +902,37 @@ footer .logo-ot {
   font-size: 1.1em;
 }
 
+.ot-members h3 {
+  color: #ffffff;
+  background-color: #adaeae;
+  text-align: center;
+  font-weight: bold;
+  height: 18px;
+  padding: 6px;
+}
+.ot-members .ot-members-list {
+  list-style: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: end;
+  justify-content: center;
+}
+.ot-members .ot-member {
+  margin: 15px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.ot-members .ot-member img {
+  max-width: 120px;
+  max-height: 150px;
+  height: auto;
+}
+.ot-members .ot-member-name {
+  text-align: center;
+}
+
 .frame-type-menu_sitemap {
   font-size: 16px;
   font-weight: bold;

File diff suppressed because it is too large
+ 0 - 0
ot_templating/Resources/Public/assets/style/theme-red.css.map


+ 28 - 13
ot_widgets/Classes/Controller/MemberController.php

@@ -26,20 +26,33 @@ class MemberController extends ActionController
 
         // Get members of the structure
         $members = $this->memberRepository->findByOrganizationId($organizationId);
+        // Sort alphabetically by name
+        usort($members, function($a, $b) {return strcmp($a->getName(), $b->getName());});
 
-        $membersByInstrument = ['CONDUCTOR' => []];
+        // Instruments to display in first place (next will be sorted alphabetically)
+        $stack1 = ['CONDUCTOR' => []];
 
+        $stack2 = [];
         foreach ($members as $member) {
-            if (!array_key_exists($member->getInstrument(), $membersByInstrument)) {
-                $membersByInstrument[$member->getInstrument()] = [];
+            // If that Instrument exist in stack1: put it in this one
+            if (array_key_exists($member->getInstrument(), $stack1)) {
+                array_push($stack1[$member->getInstrument()], $member);
+            } else {
+                // Create the new array if needed in stack2, then put the member in it
+                if (!array_key_exists($member->getInstrument(), $stack2)) {
+                    $stack2[$member->getInstrument()] = [];
+                }
+                array_push($stack2[$member->getInstrument()], $member);
             }
-            array_push($membersByInstrument[$member->getInstrument()], $member);
         }
 
-        $membersByInstrument = array_filter($membersByInstrument,
-                                            function ($key, $val) { return !empty($val); },
-                                        ARRAY_FILTER_USE_BOTH);
+        // remove empty instruments in stack 1
+        $stack1 = array_filter($stack1);
 
+        // sort by instrument stack2
+        ksort($stack2);
+
+        $membersByInstrument = array_merge($stack1, $stack2);
         $this->view->assign('membersByInstrument', $membersByInstrument);
     }
 
@@ -56,7 +69,10 @@ class MemberController extends ActionController
 
         // Get members of the structure (only CA members)
         $members = $this->memberRepository->findByOrganizationId($organizationId, true);
+        // Sort alphabetically by name
+        usort($members, function($a, $b) {return strcmp($a->getName(), $b->getName());});
 
+        // Missions to display (sorted)
         $membersByMission = [
             'PRESIDENT' => [],
             'HONORARY_PRESIDENT' => [],
@@ -76,16 +92,15 @@ class MemberController extends ActionController
             'YOUTH_REPRESENTATIVE' => []
         ];
 
+        // Put members into their categorie(s)
         foreach ($members as $member) {
-            if (!array_key_exists($member->getMission(), $membersByMission)) {
-                $membersByMission[$member->getMission()] = [];
+            if (array_key_exists($member->getMission(), $membersByMission)) {
+                array_push($membersByMission[$member->getMission()], $member);
             }
-            array_push($membersByMission[$member->getMission()], $member);
         }
 
-        $membersByMission = array_filter($membersByMission,
-            function ($key, $val) { return !empty($val); },
-            ARRAY_FILTER_USE_BOTH);
+        // Remove empty sections
+        $membersByMission = array_filter($membersByMission);
 
         $this->view->assign('membersByMission', $membersByMission);
     }

+ 3 - 1
ot_widgets/Classes/Domain/Repository/BaseApiRepository.php

@@ -11,6 +11,7 @@ class BaseApiRepository extends Repository
     const BASE_URI = 'http://api.opentalent.fr/api/';
     const HYDRA_TYPE = '';
     const HTTP_METHOD = 'GET';
+    const ITEMS_PER_PAGE = 1001;
 
     private $client;
 
@@ -26,8 +27,9 @@ class BaseApiRepository extends Repository
      */
     protected function get($uri, $params = [])
     {
+        $uri = $uri . '?_format=json&itemsPerPage=' . (string)self::ITEMS_PER_PAGE . '';
         if (!empty($params)) {
-            $uri = $uri . '?_format=json&' . http_build_query($params);
+            $uri = $uri . '&' . http_build_query($params);
         }
         return $this->client->request(static::HTTP_METHOD, $uri);
     }

+ 3 - 3
ot_widgets/Classes/Domain/Repository/MemberRepository.php

@@ -18,7 +18,7 @@ class MemberRepository extends BaseApiRepository
         }
         $member = new Member();
         $member->setId(end(explode('/', $record->{'@id'})));
-        $member->setOrganizationId($record->{'organizationId'});
+        $member->setOrganizationId((int)$record->{'organizationId'});
         $member->setGender($record->{'gender'});
         $member->setGivenName($record->{'givenName'});
         $member->setName($record->{'name'});
@@ -27,7 +27,7 @@ class MemberRepository extends BaseApiRepository
         $member->setInstrumentGroup($record->{'instrumentGroup'});
         $member->setInstrument($record->{'instrument'});
         $member->setMission($record->{'mission'});
-        $member->setPersonId($record->{'personId'});
+        $member->setPersonId((int)$record->{'personId'});
         $member->setImage($record->{'image'});
         $member->setAdressCity($record->{'addressCity'});
         $member->setStreetAdress($record->{'streetAddress'});
@@ -59,7 +59,7 @@ class MemberRepository extends BaseApiRepository
      */
     public function findByOrganizationId(int $organizationId, bool $only_ca = false) {
         $params = [];
-        $params['organizationId'] = $organizationId;
+        $params['filter[where][organizationId]'] = $organizationId;
 
         if ($only_ca) {
             $records = $this->getApiRecords($this::URI_CA, $params);

+ 1 - 1
ot_widgets/Resources/Private/Templates/Member/GetMembersCa.html

@@ -7,7 +7,7 @@
                 <f:for each="{membersByMission}" as="members" key="mission">
                     <h3>
                         <f:format.case
-                                value="{f:translate(key: 'member.instrument.{mission}')}"
+                                value="{f:translate(key: 'member.role.{mission}')}"
                                 mode="upper">
                         </f:format.case>
                     </h3>

Some files were not shown because too many files changed in this diff