GetAllCaViewHelper.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace Opentalent\OtTemplating\ViewHelpers\Members;
  3. use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait;
  4. use Opentalent\OtTemplating\Domain\Repository\MemberRepository;
  5. use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
  6. /**
  7. * This view helper provides an array named according to the 'as' variable
  8. * and which contains the CA members of the structure classed by role
  9. *
  10. * {namespace ot=Opentalent\OtTemplating\ViewHelpers}
  11. *
  12. * <ot:members.getAllCa as="members"
  13. * organizationId="{settings.organizationId}">
  14. * <f:debug>{members}</f:debug>
  15. * </ot:members.getAllCa>
  16. *
  17. * @package Opentalent\OtTemplating\ViewHelpers
  18. */
  19. class GetAllCaViewHelper extends AbstractViewHelper {
  20. use TemplateVariableViewHelperTrait;
  21. /**
  22. * >> Required to prevent typo3 to escape the html output
  23. * @var boolean
  24. */
  25. protected $escapeOutput = false;
  26. /**
  27. * @var \Opentalent\OtTemplating\Domain\Repository\MemberRepository
  28. *
  29. */
  30. protected $memberRepository;
  31. public function initializeArguments()
  32. {
  33. $this->registerArgument(
  34. 'as',
  35. 'string',
  36. 'Name of the returned array',
  37. true
  38. );
  39. $this->registerArgument(
  40. 'organizationId',
  41. 'integer',
  42. 'Id of the current structure',
  43. true
  44. );
  45. }
  46. /**
  47. * @return string
  48. */
  49. public function render()
  50. {
  51. // Get current settings
  52. $as = $this->arguments['as'];
  53. $organizationId = $this->arguments['organizationId'];
  54. // Get members of the structure (only CA members)
  55. $members = $this->memberRepository->findByOrganizationId($organizationId, true);
  56. // Sort alphabetically by name
  57. usort($members, function($a, $b) {return strcmp($a->getName(), $b->getName());});
  58. // Missions to display (sorted)
  59. $membersByMission = [
  60. 'PRESIDENT' => [],
  61. 'HONORARY_PRESIDENT' => [],
  62. 'VICE_PRESIDENT' => [],
  63. 'VICE_PRESIDENT_OF_HONOR' => [],
  64. 'PRESIDENT_ASSISTANT' => [],
  65. 'HOUR_PRESIDENT' => [],
  66. 'MEMBER_OF_THE_BOARD' => [],
  67. 'MEMBER_OF_BOARD_OF_HONOR' => [],
  68. 'ACTIVE_COOPTED_BOARD_MEMBER' => [],
  69. 'TREASURER' => [],
  70. 'TREASURER_ASSISTANT' => [],
  71. 'SECRETARY' => [],
  72. 'ASSISTANT_SECRETARY' => [],
  73. 'ACTIVE_MEMBER_OF_THE_CA' => [],
  74. 'HONORARY_MEMBER' => [],
  75. 'YOUTH_REPRESENTATIVE' => []
  76. ];
  77. // Put members into their categorie(s)
  78. foreach ($members as $member) {
  79. if (array_key_exists($member->getMission(), $membersByMission)) {
  80. array_push($membersByMission[$member->getMission()], $member);
  81. }
  82. }
  83. // Remove empty sections
  84. $membersByMission = array_filter($membersByMission);
  85. $variables = [$as => $membersByMission];
  86. return $this->renderChildrenWithVariables($variables);
  87. }
  88. /**
  89. * @param \Opentalent\OtTemplating\Domain\Repository\MemberRepository $memberRepository
  90. */
  91. public function injectMemberRepository(MemberRepository $memberRepository)
  92. {
  93. $this->memberRepository = $memberRepository;
  94. }
  95. }