Browse Source

add members et memebrsCa templates

Olivier Massot 5 years ago
parent
commit
d9980f1a4a

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

@@ -51,6 +51,28 @@ lib.allEvents {
     settings < plugin.tx_otwidgets_allevents.settings
 }
 
+lib.members = USER
+lib.members {
+    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
+    extensionName = OtWidgets
+    pluginName = Members
+    vendorName = Opentalent
+    controller = Member
+    action = getMembers
+    settings < plugin.tx_otwidgets_members.settings
+}
+
+lib.members_ca = USER
+lib.members_ca {
+    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
+    extensionName = OtWidgets
+    pluginName = Members
+    vendorName = Opentalent
+    controller = Member
+    action = getMembersCa
+    settings < plugin.tx_otwidgets_members.settings
+}
+
 lib.auth = USER
 lib.auth {
     userFunc = Opentalent\OtConnect\OtAuthenticationService->logout

+ 22 - 0
ot_templating/Resources/Private/Layouts/Members.html

@@ -0,0 +1,22 @@
+{namespace v=FluidTYPO3\Vhs\ViewHelpers}
+
+<f:comment><!-- Special layout for the Members page --></f:comment>
+<f:layout name="Members" />
+
+<f:comment><!-- Render the header defined in partial/header.html--></f:comment>
+<f:render partial="header" arguments="{_all}" />
+
+<div class="main">
+
+    <f:comment><!-- Central column --></f:comment>
+    <div class="content">
+        <f:comment><!-- All members --></f:comment>
+        <h2>Liste des adhérents</h2>
+
+        <f:cObject typoscriptObjectPath="lib.members" />
+    </div>
+
+</div> <!-- /container -->
+
+<f:comment><!-- Render the footer defined in partial/footer.html--></f:comment>
+<f:render partial="footer" />

+ 22 - 0
ot_templating/Resources/Private/Layouts/MembersCa.html

@@ -0,0 +1,22 @@
+{namespace v=FluidTYPO3\Vhs\ViewHelpers}
+
+<f:comment><!-- Special layout for the Members page --></f:comment>
+<f:layout name="Members" />
+
+<f:comment><!-- Render the header defined in partial/header.html--></f:comment>
+<f:render partial="header" arguments="{_all}" />
+
+<div class="main">
+
+    <f:comment><!-- Central column --></f:comment>
+    <div class="content">
+        <f:comment><!-- All members --></f:comment>
+        <h2>Membres du CA</h2>
+
+        <f:cObject typoscriptObjectPath="lib.members_ca" />
+    </div>
+
+</div> <!-- /container -->
+
+<f:comment><!-- Render the footer defined in partial/footer.html--></f:comment>
+<f:render partial="footer" />

+ 17 - 0
ot_templating/Resources/Private/Templates/Page/Members.html

@@ -0,0 +1,17 @@
+{namespace flux=FluidTYPO3\Flux\ViewHelpers}
+{namespace v=FluidTYPO3\Vhs\ViewHelpers}
+
+<f:comment><!-- uses the layout Members, defined in layouts/Members.html --></f:comment>
+<f:layout name="Members" />
+
+<f:section name='Configuration'>
+    <flux:form id="members" label="Gabarit Adherents" extensionName="Opentalent.OtTemplating">
+    </flux:form>
+
+    <!-- Backend layout grid -->
+    <flux:grid>
+        <flux:grid.row>
+        </flux:grid.row>
+    </flux:grid>
+</f:section>
+

+ 17 - 0
ot_templating/Resources/Private/Templates/Page/MembersCa.html

@@ -0,0 +1,17 @@
+{namespace flux=FluidTYPO3\Flux\ViewHelpers}
+{namespace v=FluidTYPO3\Vhs\ViewHelpers}
+
+<f:comment><!-- uses the layout Members, defined in layouts/Members.html --></f:comment>
+<f:layout name="MembersCa" />
+
+<f:section name='Configuration'>
+    <flux:form id="members_ca" label="Gabarit Membres CA" extensionName="Opentalent.OtTemplating">
+    </flux:form>
+
+    <!-- Backend layout grid -->
+    <flux:grid>
+        <flux:grid.row>
+        </flux:grid.row>
+    </flux:grid>
+</f:section>
+

+ 55 - 0
ot_widgets/Classes/Controller/MemberController.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace Opentalent\OtWidgets\Controller;
+
+use Opentalent\OtWidgets\Domain\Repository\MemberRepository;
+use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
+
+class MemberController extends ActionController
+{
+    /**
+     * @var MemberRepository
+     *
+     */
+    protected $memberRepository;
+
+    /** @noinspection PhpUnused */
+    /**
+     * action getMembersAction
+     *
+     * @param array $options
+     * @return void
+     * @throws \Exception
+     */
+    public function getMembersAction(array $options = []) {
+        $organizationId = (int) $this->settings['organizationId'];
+
+        // Get members of the structure
+        $members = $this->memberRepository->findByOrganizationId($organizationId);
+        $this->view->assign('members', $members);
+    }
+
+    /** @noinspection PhpUnused */
+    /**
+     * action getCaMembersAction
+     *
+     * @param array $options
+     * @return void
+     * @throws \Exception
+     */
+    public function getMembersCaAction(array $options = []) {
+        $organizationId = (int) $this->settings['organizationId'];
+
+        // Get members of the structure (only CA members)
+        $members = $this->memberRepository->findByOrganizationId($organizationId, true);
+        $this->view->assign('members', $members);
+    }
+
+    /**
+     * @param MemberRepository $memberRepository
+     */
+    public function injectMemberRepository(MemberRepository $memberRepository)
+    {
+        $this->memberRepository = $memberRepository;
+    }
+}

+ 488 - 0
ot_widgets/Classes/Domain/Model/Member.php

@@ -0,0 +1,488 @@
+<?php
+namespace Opentalent\OtWidgets\Domain\Model;
+
+use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
+
+/**
+ * Member of an organization
+ */
+class Member extends AbstractEntity
+{
+    /**
+     * id
+     *
+     * @var int
+     */
+    protected $id = -1;
+
+    /**
+     * organizationId
+     *
+     * @var int
+     */
+    protected $organizationId = -1;
+
+    /**
+     * gender ('MISS' or 'MISTER')
+     *
+     * @var string
+     */
+    protected $gender = '';
+
+    /**
+     * givenName (first name)
+     *
+     * @var string
+     */
+    protected $givenName = '';
+
+    /**
+     * name
+     *
+     * @var string
+     */
+    protected $name = '';
+
+    /**
+     * startDate
+     *
+     * @var \Datetime
+     */
+    protected $startDate = null;
+
+    /**
+     * endDate
+     *
+     * @var \Datetime
+     */
+    protected $endDate = null;
+
+    /**
+     * instrumentGroup
+     *
+     * @var string
+     */
+    protected $instrumentGroup = '';
+
+    /**
+     * instrument
+     *
+     * @var string
+     */
+    protected $instrument = '';
+
+    /**
+     * mission
+     *
+     * @var string
+     */
+    protected $mission = '';
+
+    /**
+     * personId
+     *
+     * @var string
+     */
+    protected $personId = -1;
+
+    /**
+     * image
+     *
+     * @var string
+     */
+    protected $image = '';
+
+    /**
+     * addressCity
+     *
+     * @var string
+     */
+    protected $addressCity = '';
+
+    /**
+     * streetAddress
+     *
+     * @var string
+     */
+    protected $streetAddress = '';
+
+    /**
+     * streetAddressSecond
+     *
+     * @var string
+     */
+    protected $streetAddressSecond = '';
+
+    /**
+     * streetAddressThird
+     *
+     * @var string
+     */
+    protected $streetAddressThird = '';
+
+    /**
+     * postalCode
+     *
+     * @var string
+     */
+    protected $postalCode = '';
+
+    /**
+     * telphone
+     *
+     * @var string
+     */
+    protected $telphone = '';
+
+    /**
+     * mobilPhone
+     *
+     * @var string
+     */
+    protected $mobilPhone = '';
+
+    /**
+     * email
+     *
+     * @var string
+     */
+    protected $email = '';
+
+
+    /**
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * @param int $id
+     */
+    public function setId(int $id)
+    {
+        $this->id = $id;
+    }
+
+    /**
+     * @return int
+     */
+    public function getOrganizationId()
+    {
+        return $this->organizationId;
+    }
+
+    /**
+     * @param int $organizationId
+     */
+    public function setOrganizationId(int $organizationId)
+    {
+        $this->organizationId = $organizationId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getGender()
+    {
+        return $this->gender;
+    }
+
+    /**
+     * @param string $gender
+     */
+    public function setGender($gender = '')
+    {
+        $this->gender = $gender;
+    }
+
+    /**
+     * @return string
+     */
+    public function getGivenName()
+    {
+        return $this->givenName;
+    }
+
+    /**
+     * @param string $givenName
+     */
+    public function setGivenName($givenName = '')
+    {
+        $this->givenName = $givenName;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * @param string $name
+     */
+    public function setName($name = '')
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * @return \Datetime
+     */
+    public function getStartDate()
+    {
+        return $this->startDate;
+    }
+
+    /**
+     * @param \Datetime $startDate
+     */
+    public function setStartDate(\Datetime $startDate)
+    {
+        $this->startDate = $startDate;
+    }
+
+    /**
+     * @return \Datetime
+     */
+    public function getEndDate()
+    {
+        return $this->endDate;
+    }
+
+    /**
+     * @param \Datetime $endDate
+     */
+    public function setEndDate(\Datetime $endDate)
+    {
+        $this->endDate = $endDate;
+    }
+
+    /**
+     * @return string
+     */
+    public function getInstrumentGroup()
+    {
+        return $this->instrumentGroup;
+    }
+
+    /**
+     * @param string $instrumentGroup
+     */
+    public function setInstrumentGroup($instrumentGroup = '')
+    {
+        $this->instrumentGroup = $instrumentGroup;
+    }
+
+    /**
+     * @return string
+     */
+    public function getInstrument()
+    {
+        return $this->instrument;
+    }
+
+    /**
+     * @param string $instrument
+     */
+    public function setInstrument($instrument = '')
+    {
+        $this->instrument = $instrument;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMission()
+    {
+        return $this->mission;
+    }
+
+    /**
+     * @param string $mission
+     */
+    public function setMission($mission = '')
+    {
+        $this->mission = $mission;
+    }
+
+    /**
+     * @return int
+     */
+    public function getPersonId()
+    {
+        return $this->personId;
+    }
+
+    /**
+     * @param int $personId
+     */
+    public function setPersonId(int $personId)
+    {
+        $this->personId = $personId;
+    }
+
+    /**
+     * @return string
+     */
+    public function getImage()
+    {
+        return $this->image;
+    }
+
+    /**
+     * @param string $image
+     */
+    public function setImage($image = '')
+    {
+        $this->image = $image;
+    }
+
+    /**
+     * @return string
+     */
+    public function getAdressCity()
+    {
+        return $this->addressCity;
+    }
+
+    /**
+     * @param string $addressCity
+     */
+    public function setAdressCity($addressCity = '')
+    {
+        $this->addressCity = $addressCity;
+    }
+
+    /**
+     * @return string
+     */
+    public function getStreetAdress()
+    {
+        return $this->streetAddress;
+    }
+
+    /**
+     * @param string $streetAddress
+     */
+    public function setStreetAdress($streetAddress = '')
+    {
+        $this->streetAddress = $streetAddress;
+    }
+
+    /**
+     * @return string
+     */
+    public function getStreetAdressSecond()
+    {
+        return $this->streetAddressSecond;
+    }
+
+    /**
+     * @param string $streetAddressSecond
+     */
+    public function setStreetAdressSecond($streetAddressSecond = '')
+    {
+        $this->streetAddressSecond = $streetAddressSecond;
+    }
+
+    /**
+     * @return string
+     */
+    public function getStreetAdressThird()
+    {
+        return $this->streetAddressThird;
+    }
+
+    /**
+     * @param string $streetAddressThird
+     */
+    public function setStreetAdressThird($streetAddressThird = '')
+    {
+        $this->streetAddressThird = $streetAddressThird;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPostalCode()
+    {
+        return $this->postalCode;
+    }
+
+    /**
+     * @param string $postalCode
+     */
+    public function setPostalCode($postalCode = '')
+    {
+        $this->postalCode = $postalCode;
+    }
+
+    /**
+     * @return string
+     */
+    public function getTelphone()
+    {
+        return $this->telphone;
+    }
+
+    /**
+     * @param string $telphone
+     */
+    public function setTelphone($telphone = '')
+    {
+        $this->telphone = $telphone;
+    }
+
+    /**
+     * @return string
+     */
+    public function getMobilPhone()
+    {
+        return $this->mobilPhone;
+    }
+
+    /**
+     * @param string $mobilPhone
+     */
+    public function setMobilPhone($mobilPhone = '')
+    {
+        $this->mobilPhone = $mobilPhone;
+    }
+
+    /**
+     * @return string
+     */
+    public function getEmail()
+    {
+        return $this->email;
+    }
+
+    /**
+     * @param string $email
+     */
+    public function setEmail($email = '')
+    {
+        $this->email = $email;
+    }
+
+    /**
+     * Return a full name for the member
+     *
+     * @return string
+     */
+    public function getFullName()
+    {
+        if ($this->getGivenName() && $this->getName()) {
+            return $this->getGivenName() . ' ' . $this->getName();
+        } else if ($this->getName() && $this->getGender()) {
+            return 'M. ' . $this->getName();
+        } else {
+            return '';
+        }
+
+    }
+}

+ 72 - 0
ot_widgets/Classes/Domain/Repository/MemberRepository.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace Opentalent\OtWidgets\Domain\Repository;
+
+use Opentalent\OtWidgets\Domain\Model\Member;
+
+class MemberRepository extends BaseApiRepository
+{
+    CONST URI = BaseApiRepository::BASE_URI . '/public/members';
+    CONST URI_CA = BaseApiRepository::BASE_URI . '/public/members_ca';
+    const HYDRA_TYPE = 'PortailMemberBySpeciality';
+    const HYDRA_TYPE_CA = 'PortailMemberByRole';
+
+    private function memberFromJson($record) {
+        if ($record->{'@type'} != $this::HYDRA_TYPE &&
+            $record->{'@type'} != $this::HYDRA_TYPE_CA) {
+            return null;
+        }
+        $member = new Member();
+        $member->setId(end(explode('/', $record->{'@id'})));
+        $member->setOrganizationId($record->{'organizationId'});
+        $member->setGender($record->{'gender'});
+        $member->setGivenName($record->{'givenName'});
+        $member->setName($record->{'name'});
+        $member->setStartDate(new \DateTime($record->{'startDate'}));
+        $member->setEndDate(new \DateTime($record->{'endDate'}));
+        $member->setInstrumentGroup($record->{'instrumentGroup'});
+        $member->setInstrument($record->{'instrument'});
+        $member->setPersonId($record->{'personId'});
+        $member->setImage($record->{'image'});
+        $member->setAdressCity($record->{'addressCity'});
+        $member->setStreetAdress($record->{'streetAddress'});
+        $member->setStreetAdressSecond($record->{'streetAddressSecond'});
+        $member->setStreetAdressThird($record->{'streetAddressThird'});
+        $member->setPostalCode($record->{'postalCode'});
+        $member->setTelphone($record->{'telphone'});
+        $member->setMobilPhone($record->{'mobilPhone'});
+        $member->setEmail($record->{'email'});
+
+        return $member;
+    }
+
+    private function membersFromJson($records) {
+        $members = [];
+        foreach ($records as $record) {
+            $members[] = $this->memberFromJson($record);
+        }
+        return $members;
+    }
+
+    /**
+     * Get the members of the organization
+     * If $only_ca is true, returns only the members onf the CA
+     *
+     * @param int $organizationId The id of the organization
+     * @return array              Members
+     * @throws \Exception
+     */
+    public function findByOrganizationId(int $organizationId, bool $only_ca = false) {
+        $params = [];
+        $params['organizationId'] = $organizationId;
+
+        if ($only_ca) {
+            $records = $this->getApiRecords($this::URI_CA, $params);
+        } else {
+            $records = $this->getApiRecords($this::URI, $params);
+        }
+
+        return $this->membersFromJson($records);
+    }
+
+}

+ 22 - 0
ot_widgets/Configuration/TypoScript/setup.ts

@@ -69,3 +69,25 @@ plugin.tx_otwidgets_donors {
         carousel = {$plugin.tx_ottemplating.settings.donors.carousel}
     }
 }
+
+plugin.tx_otwidgets_members {
+    view {
+        templateRootPaths.0 = EXT:ot_widgets/Resources/Private/Templates/
+        partialRootPaths.0 = EXT:ot_widgets/Resources/Private/Partials/
+        layoutRootPaths.0 = EXT:ot_widgets/Resources/Private/Layouts/
+    }
+    features {
+        #skipDefaultArguments = 1
+        # if set to 1, the enable fields are ignored in BE context
+        ignoreAllEnableFieldsInBe = 0
+        # Should be on by default, but can be disabled if all action in the plugin are uncached
+        requireCHashArgumentForActionArguments = 1
+    }
+    mvc {
+        #callDefaultActionIfActionCantBeResolved = 1
+    }
+
+    settings {
+        organizationId = {$plugin.tx_ottemplating.settings.organization.id}
+    }
+}

+ 39 - 0
ot_widgets/Resources/Private/Templates/Member/GetMembers.html

@@ -0,0 +1,39 @@
+<f:layout name="Default" />
+
+<f:section name="content">
+    <div class="ot-members-ca">
+        <f:if condition="{members -> f:count()} > 0">
+            <f:then>
+                <f:for each="{members}" as="member">
+                    <ul class="adherents">
+                        <li class="ot-member">
+                            <p class="ot-member-image">
+                                <f:if condition="{member.image}">
+                                    <f:then>
+                                        <img src="{member.image}/160x0"/>
+                                    </f:then>
+                                    <f:else>
+                                        <f:if condition="{member.gender}== 'MISTER'">
+                                            <f:then>
+                                                <img src="EXT:ot_widgets/Resources/Public/assets/media/man-default.jpg"/>
+                                            </f:then>
+                                            <f:else>
+                                                <img src="EXT:ot_widgets/Resources/Public/assets/media/woman-default.jpg"/>
+                                            </f:else>
+                                        </f:if>
+                                    </f:else>
+                                </f:if>
+                            </p>
+                            <p class="ot-member-name">
+                                {member.fullName}
+                            </p>
+                        </li>
+                    </ul>
+                </f:for>
+            </f:then>
+            <f:else>
+                <h5>Aucun adhérent</h5>
+            </f:else>
+        </f:if>
+    </div>
+</f:section>

+ 39 - 0
ot_widgets/Resources/Private/Templates/Member/GetMembersCa.html

@@ -0,0 +1,39 @@
+<f:layout name="Default" />
+
+<f:section name="content">
+    <div class="ot-members-ca">
+        <f:if condition="{members -> f:count()} > 0">
+            <f:then>
+                <f:for each="{members}" as="member">
+                    <ul class="adherents">
+                        <li class="ot-member">
+                            <p class="ot-member-image">
+                                <f:if condition="{member.image}">
+                                    <f:then>
+                                        <img src="{member.image}/160x0"/>
+                                    </f:then>
+                                    <f:else>
+                                        <f:if condition="{member.gender}== 'MISTER'">
+                                            <f:then>
+                                                <img src="EXT:ot_widgets/Resources/Public/assets/media/man-default.jpg"/>
+                                            </f:then>
+                                            <f:else>
+                                                <img src="EXT:ot_widgets/Resources/Public/assets/media/woman-default.jpg"/>
+                                            </f:else>
+                                        </f:if>
+                                    </f:else>
+                                </f:if>
+                            </p>
+                            <p class="ot-member-name">
+                                {member.fullName}
+                            </p>
+                        </li>
+                    </ul>
+                </f:for>
+            </f:then>
+            <f:else>
+                <h5>Aucun adhérent</h5>
+            </f:else>
+        </f:if>
+    </div>
+</f:section>

BIN
ot_widgets/Resources/Public/assets/media/man-default.jpg


BIN
ot_widgets/Resources/Public/assets/media/woman-default.jpg


+ 11 - 1
ot_widgets/ext_localconf.php

@@ -36,7 +36,17 @@ call_user_func(
             ],
             // non-cacheable actions
             [
-                
+            ]
+        );
+
+        \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
+            'Opentalent.OtWidgets',
+            'Members',
+            [
+                'Member' => 'getMembers,getMembersCa'
+            ],
+            // non-cacheable actions
+            [
             ]
         );