GetPresidentViewHelper.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Opentalent\OtTemplating\ViewHelpers\Members;
  3. use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait;
  4. use Opentalent\OtCore\ViewHelpers\OtAbstractViewHelper;
  5. use Opentalent\OtCore\Domain\Repository\MemberRepository;
  6. use Opentalent\OtCore\Exception\ApiRequestException;
  7. /**
  8. * This view helper give access to an array named according to the 'as' variable
  9. * and which contains the CA members of the structure classed by role
  10. *
  11. * {namespace ot=Opentalent\OtTemplating\ViewHelpers}
  12. *
  13. * <ot:members.getPresident as="president" organizationId="{settings.organizationId}">
  14. * <f:debug>{president}</f:debug>
  15. * </ot:members.getAllCa>
  16. *
  17. * @package Opentalent\OtTemplating\ViewHelpers
  18. */
  19. class GetPresidentViewHelper extends OtAbstractViewHelper {
  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 MemberRepository
  28. *
  29. */
  30. protected MemberRepository $memberRepository;
  31. /**
  32. * -- This method is expected by Fluid --
  33. * Declares the viewhelper's parameters
  34. */
  35. public function initializeArguments()
  36. {
  37. $this->registerArgument(
  38. 'as',
  39. 'string',
  40. 'Name of the returned array',
  41. true
  42. );
  43. $this->registerArgument(
  44. 'organizationId',
  45. 'integer',
  46. 'Id of the current structure',
  47. true
  48. );
  49. }
  50. /**
  51. * -- This method is expected by Fluid --
  52. * Renders the content as html
  53. *
  54. * @return string
  55. */
  56. public function render()
  57. {
  58. // Get current settings
  59. $as = $this->arguments['as'];
  60. $organizationId = $this->arguments['organizationId'];
  61. // Get members of the structure (only CA members)
  62. try {
  63. $collection = $this->memberRepository->findByOrganizationId($organizationId, true);
  64. $members = $collection->getMembers();
  65. } catch (ApiRequestException $e) {
  66. $this->logger->error(sprintf('API Error: %s', $e->getMessage()));
  67. $members = [];
  68. }
  69. $president = null;
  70. foreach ($members as $member) {
  71. if ($member->getMission() == 'PRESIDENT') {
  72. $president = $member;
  73. break;
  74. }
  75. }
  76. $variables = [$as => $president];
  77. return $this->renderChildrenWithVariables($variables);
  78. }
  79. /**
  80. * @param MemberRepository $memberRepository
  81. */
  82. public function injectMemberRepository(MemberRepository $memberRepository)
  83. {
  84. $this->memberRepository = $memberRepository;
  85. }
  86. }