Explorar o código

complete the previous refactoring with events

Olivier Massot %!s(int64=5) %!d(string=hai) anos
pai
achega
ab2abbb93b

+ 15 - 15
ot_templating/Classes/ViewHelpers/Events/GetAllViewHelper.php

@@ -60,21 +60,21 @@ class GetAllViewHelper extends AbstractViewHelper {
         $organizationId = $this->arguments['organizationId'];
 
         $searchParams = [];
-//        $args = $this->request->getArguments();
-//        if($args['search-loc']) {
-//            $searchParams['where'] = $args['search-loc'];
-//        }
-//        if($args['search-name']) {
-//            $searchParams['what'] = $args['search-name'];
-//        }
-//        if($args['search-datestart']) {
-//            $dateStart = \DateTime::createFromFormat('d/m/Y', $args['search-datestart']);
-//            $searchParams['datetimeStart'] = $dateStart->format('d-m-Y');
-//        }
-//        if($args['search-dateend']) {
-//            $dateEnd = \DateTime::createFromFormat('d/m/Y', $args['search-dateend']);
-//            $searchParams['datetimeEnd'] = $dateEnd->format('d-m-Y');
-//        }
+
+        if($_REQUEST['search-loc']) {
+            $searchParams['where'] = $_REQUEST['search-loc'];
+        }
+        if($_REQUEST['search-name']) {
+            $searchParams['what'] = $_REQUEST['search-name'];
+        }
+        if($_REQUEST['search-datestart']) {
+            $dateStart = \DateTime::createFromFormat('d/m/Y', $_REQUEST['search-datestart']);
+            $searchParams['datetimeStart'] = $dateStart->format('d-m-Y');
+        }
+        if($_REQUEST['search-dateend']) {
+            $dateEnd = \DateTime::createFromFormat('d/m/Y', $_REQUEST['search-dateend']);
+            $searchParams['datetimeEnd'] = $dateEnd->format('d-m-Y');
+        }
 
         $events = $this->eventRepository->searchBy($organizationId, $searchParams);
         $variables = [$as => $events];

+ 45 - 0
ot_templating/Classes/ViewHelpers/Request/GetArgumentViewHelper.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace Opentalent\OtTemplating\ViewHelpers\Request;
+
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
+
+/**
+ *   Check if an argument with this name was passed trough the request.
+ *   If this is the case, returns this argument's value; if not returns null.
+ *
+ *     {namespace ot=Opentalent\OtTemplating\ViewHelpers}
+ *
+ *     {ot:request.getArgument('name')}
+ *
+ * @package Opentalent\OtTemplating\ViewHelpers
+ */
+class GetArgumentViewHelper extends AbstractViewHelper {
+
+    public function initializeArguments()
+    {
+        $this->registerArgument('argument',
+            'string',
+            "The argument's name",
+            true);
+    }
+
+    /**
+     * @param array $arguments
+     * @param \Closure $renderChildrenClosure
+     * @param RenderingContextInterface $renderingContext
+     * @return int|null
+     */
+    public static function renderStatic(
+        array $arguments,
+        \Closure $renderChildrenClosure,
+        RenderingContextInterface $renderingContext
+    ) {
+        $argument = $arguments['argument'];
+        if (isset($_REQUEST[$argument])) {
+            return $_REQUEST[$argument];
+        }
+        return null;
+    }
+}

+ 45 - 0
ot_templating/Classes/ViewHelpers/Request/GetParameterViewHelper.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace Opentalent\OtTemplating\ViewHelpers\Request;
+
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
+
+/**
+ *   Check if a parameter with this name was passed trough the GET request.
+ *   If this is the case, returns this parameter; if not returns null.
+ *
+ *     {namespace ot=Opentalent\OtTemplating\ViewHelpers}
+ *
+ *     {ot:request.getParameter('name')}
+ *
+ * @package Opentalent\OtTemplating\ViewHelpers
+ */
+class GetParameterViewHelper extends AbstractViewHelper {
+
+    public function initializeArguments()
+    {
+        $this->registerArgument('param',
+            'string',
+            "The parameter's name",
+            true);
+    }
+
+    /**
+     * @param array $arguments
+     * @param \Closure $renderChildrenClosure
+     * @param RenderingContextInterface $renderingContext
+     * @return int|null
+     */
+    public static function renderStatic(
+        array $arguments,
+        \Closure $renderChildrenClosure,
+        RenderingContextInterface $renderingContext
+    ) {
+        $param = $arguments['param'];
+        if (isset($_REQUEST[$param])) {
+            return $_REQUEST[$param];
+        }
+        return null;
+    }
+}

+ 16 - 69
ot_templating/Resources/Private/Layouts/Classic/Events.html

@@ -11,78 +11,25 @@
 
     <f:comment><!-- Central column --></f:comment>
     <div class="content">
-        <f:comment><!-- All events --></f:comment>
 
-        <div class="ot-all-events">
-            <ot:events.getAll as="events"
-                              organizationId="{settings.organizationId}">
 
-                <div class="events-controls">
-                    <div class="event-search">
-                        <h3>Rechercher un évènement: </h3>
-                        <f:form action="index">
-                            <f:form.textfield name="search-loc" placeholder="Où?" value="{args.search-loc}"/>
-                            <f:form.textfield name="search-name" placeholder="Quoi?" value="{args.search-name}" />
-                            <f:form.textfield name="search-datestart" placeholder="Depuis le..." class="datepicker datetimepicker" value="{args.search-datestart}" />
-                            <f:form.textfield name="search-dateend" placeholder="Jusqu'au..." class="datepicker datetimepicker" value="{args.search-dateend}" />
-                            <f:form.button name="search-submit">Rechercher</f:form.button>
-                        </f:form>
-                    </div>
-                    <div id="event-map" data-records="">
-                        <f:for each="{allEvents}" as="event">
-                            <f:if condition="{event.longitude}">
-                                <f:then>
-                                    <i class="event-geodata" style="display: none;"
-                                       data-id="{event.id}"
-                                       data-long="{event.longitude}"
-                                       data-lat="{event.latitude}"
-                                       data-label="<b>{event.name}</b><br/>{event.locAndDate}">
-                                    </i>
-                                </f:then>
-                            </f:if>
-                        </f:for>
-                    </div>
-                </div>
+        <f:if condition="{ot:request.getParameter(param: 'eventId')}">
+            <f:then>
+                <f:comment><!-- An event was requested: show this event--></f:comment>
+                <ot:events.getById as="event"
+                                   eventId="{ot:request.getParameter(param: 'eventId')}">
+                    <f:render partial="Classic/EventsShow" arguments="{_all}"/>
+                </ot:events.getById>
+            </f:then>
+            <f:else>
+                <f:comment><!-- No specific event was requested: show all events --></f:comment>
+                <ot:events.getAll as="events"
+                                   organizationId="{settings.organizationId}">
+                    <f:render partial="Classic/EventsIndex" arguments="{_all}"/>
+                </ot:events.getAll>
+            </f:else>
+        </f:if>
 
-                <div class="events-results">
-                    <f:if condition="{allEvents -> f:count()} == 0">
-                        <span>Aucun résultat</span>
-                    </f:if>
-
-                    <f:for each="{allEvents}" as="event">
-                        <div class="event" data-id="{event.id}">
-                            <div class="event-preview">
-
-                                <div class="event-poster">
-                                    <f:if condition="{event.image}">
-                                        <f:then>
-                                            <img src='{event.image}' alt="poster" />
-                                        </f:then>
-                                        <f:else>
-                                            <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                        </f:else>
-                                    </f:if>
-                                </div>
-
-                                <div class="event-summary">
-                    <span class="event-name">
-                        {event.name}
-                    </span>
-                                    <span class="event-loc-date">
-                        {event.locAndDate}
-                    </span>
-                                    <span class="event-description">
-                        {event.shortDescription}
-                    </span>
-                                </div>
-                            </div>
-
-                            <f:link.action action="show" arguments="{eventId: event.id}" class="event-see"><i class="fa fa-plus" style="margin-right: 5px;"></i><span>Plus d'infos</span></f:link.action>
-                        </div>
-                    </f:for>
-                </div>
-            </ot:events.getAll>
-        </div>
     </div>
 </div>
 

+ 7 - 1
ot_templating/Resources/Private/Layouts/Classic/Home.html

@@ -8,7 +8,13 @@
     <f:comment><!-- Left column --></f:comment>
     <div class="leftcol">
         <f:comment><!-- Render the next events section defined in partial/NextEvents.html--></f:comment>
-        <f:render partial="Classic/NextEvents" />
+        <f:render partial="Classic/NextEvents" arguments="{settings: settings}"/>
+        <f:if condition="{settings.organizationIsNetwork}==0">
+            <f:render partial="Classic/NextEvents" arguments="{settings: settings, fromParents: 1}"/>
+        </f:if>
+        <f:if condition="{settings.organizationIsNetwork}==1">
+            <f:render partial="Classic/NextEvents" arguments="{settings: settings, fromChildren: 1}"/>
+        </f:if>
 
         <div class="content">
             <f:comment><!-- render the content of the leftcol section (left column) --></f:comment>

+ 18 - 74
ot_templating/Resources/Private/Layouts/Modern/Events.html

@@ -4,88 +4,32 @@
 <f:comment><!-- Special layout for the All Events page --></f:comment>
 <f:layout name="Events" />
 
-<div class="t-container st-effect-3">
+<section class="t-container st-effect-3">
 
     <f:comment><!-- Render the header defined in partials/Header.html--></f:comment>
     <f:render partial="Modern/Header" arguments="{_all}" />
 
-    <f:comment><!-- Render content --></f:comment>
     <section class="page-section-ptb">
         <div class="container">
             <div class="row">
                 <div class="col-sm-12 mt-30">
-                    <f:comment><!-- All events --></f:comment>
 
-                    <div class="ot-all-events">
-                        <ot:events.getAll as="events"
-                                          organizationId="{settings.organizationId}">
-
-                            <div class="events-controls">
-                                <div class="event-search">
-                                    <h3>Rechercher un évènement: </h3>
-                                    <f:form action="index">
-                                        <f:form.textfield name="search-loc" placeholder="Où?" value="{args.search-loc}"/>
-                                        <f:form.textfield name="search-name" placeholder="Quoi?" value="{args.search-name}" />
-                                        <f:form.textfield name="search-datestart" placeholder="Depuis le..." class="datepicker datetimepicker" value="{args.search-datestart}" />
-                                        <f:form.textfield name="search-dateend" placeholder="Jusqu'au..." class="datepicker datetimepicker" value="{args.search-dateend}" />
-                                        <f:form.button name="search-submit">Rechercher</f:form.button>
-                                    </f:form>
-                                </div>
-                                <div id="event-map" data-records="">
-                                    <f:for each="{allEvents}" as="event">
-                                        <f:if condition="{event.longitude}">
-                                            <f:then>
-                                                <i class="event-geodata" style="display: none;"
-                                                   data-id="{event.id}"
-                                                   data-long="{event.longitude}"
-                                                   data-lat="{event.latitude}"
-                                                   data-label="<b>{event.name}</b><br/>{event.locAndDate}">
-                                                </i>
-                                            </f:then>
-                                        </f:if>
-                                    </f:for>
-                                </div>
-                            </div>
-
-                            <div class="events-results">
-                                <f:if condition="{allEvents -> f:count()} == 0">
-                                    <span>Aucun résultat</span>
-                                </f:if>
-
-                                <f:for each="{allEvents}" as="event">
-                                    <div class="event" data-id="{event.id}">
-                                        <div class="event-preview">
-
-                                            <div class="event-poster">
-                                                <f:if condition="{event.image}">
-                                                    <f:then>
-                                                        <img src='{event.image}' alt="poster" />
-                                                    </f:then>
-                                                    <f:else>
-                                                        <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                                    </f:else>
-                                                </f:if>
-                                            </div>
-
-                                            <div class="event-summary">
-                                <span class="event-name">
-                                    {event.name}
-                                </span>
-                                                <span class="event-loc-date">
-                                    {event.locAndDate}
-                                </span>
-                                                <span class="event-description">
-                                    {event.shortDescription}
-                                </span>
-                                            </div>
-                                        </div>
-
-                                        <f:link.action action="show" arguments="{eventId: event.id}" class="event-see"><i class="fa fa-plus" style="margin-right: 5px;"></i><span>Plus d'infos</span></f:link.action>
-                                    </div>
-                                </f:for>
-                            </div>
-                        </ot:events.getAll>
-                    </div>
+                    <f:if condition="{ot:request.getParameter(param: 'eventId')}">
+                        <f:then>
+                            <f:comment><!-- An event was requested: show this event--></f:comment>
+                            <ot:events.getById as="event"
+                                               eventId="{ot:request.getParameter(param: 'eventId')}">
+                                <f:render partial="Modern/EventsShow" arguments="{_all}"/>
+                            </ot:events.getById>
+                        </f:then>
+                        <f:else>
+                            <f:comment><!-- No specific event was requested: show all events --></f:comment>
+                            <ot:events.getAll as="events"
+                                              organizationId="{settings.organizationId}">
+                                <f:render partial="Modern/EventsIndex" arguments="{_all}"/>
+                            </ot:events.getAll>
+                        </f:else>
+                    </f:if>
                 </div>
             </div>
         </div>
@@ -94,4 +38,4 @@
     <f:comment><!-- Render the footer defined in partials/footer.html--></f:comment>
     <f:render partial="Modern/Footer" />
 
-</div>
+</section>

+ 8 - 2
ot_templating/Resources/Private/Layouts/Modern/Home.html

@@ -14,8 +14,14 @@
                     <f:comment><!-- render the content --></f:comment>
                     <f:render section="Content" />
 
-                    <f:comment><!-- Render the donors section defined in partial/Donors.html--></f:comment>
-                    <f:render partial="Modern/NextEvents" />
+                    <f:comment><!-- Render the next events section defined in partial/NextEvents.html--></f:comment>
+                    <f:render partial="Modern/NextEvents" arguments="{settings: settings}"/>
+                    <f:if condition="{settings.organizationIsNetwork}==0">
+                        <f:render partial="Modern/NextEvents" arguments="{settings: settings, fromParents: 1}"/>
+                    </f:if>
+                    <f:if condition="{settings.organizationIsNetwork}==1">
+                        <f:render partial="Modern/NextEvents" arguments="{settings: settings, fromChildren: 1}"/>
+                    </f:if>
 
                     <f:comment><!-- Render the donors section defined in partial/Donors.html--></f:comment>
                     <f:render partial="Modern/Donors" />

+ 4 - 1
ot_templating/Resources/Private/Partials/Classic/Assets.html

@@ -12,6 +12,9 @@ Assets included with the VHS viewhelpers
 <v:asset.style name="fontAwesome"
                path="{assets_dir}/style/ext/font-awesome/css/all.min.css"/>
 
+<v:asset.style name="jquery-ui-css"
+               path="{assets_dir}/style/ext/jquery-ui.min.css"/>
+
 <v:asset.style name="slick-css"
                path="{assets_dir}/style/ext/slick.css"/>
 
@@ -38,7 +41,7 @@ Assets included with the VHS viewhelpers
                 path="{assets_dir}/script/jquery-3.4.1.min.js"/>
 
 <v:asset.script name="datepicker"
-                path="{assets_dir}/script/jquery-ui.js"/>
+                path="{assets_dir}/script/jquery-ui.min.js"/>
 
 <v:asset.script name="slick"
                 path="{assets_dir}/script/slick.min.js"

+ 90 - 0
ot_templating/Resources/Private/Partials/Classic/EventsIndex.html

@@ -0,0 +1,90 @@
+{namespace ot=Opentalent\OtTemplating\ViewHelpers}
+
+<f:comment><!-- All events --></f:comment>
+
+<div class="ot-all-events">
+    <div class="events-controls">
+        <div class="event-search">
+            <h3>Rechercher un évènement: </h3>
+            <form>
+                <input type="text"
+                       name="search-loc"
+                       placeholder="Où?"
+                       value="{ot:request.getArgument(argument: 'search-loc')}"/>
+                <input type="text"
+                       name="search-name"
+                       placeholder="Quoi?"
+                       value="{ot:request.getArgument(argument: 'search-name')}" />
+                <input type="text"
+                       name="search-datestart"
+                       placeholder="Depuis le..."
+                       class="datepicker datetimepicker"
+                       value="{ot:request.getArgument(argument: 'search-datestart')}" />
+                <input type="text"
+                       name="search-dateend"
+                       placeholder="Jusqu'au..."
+                       class="datepicker datetimepicker"
+                       value="{ot:request.getArgument(argument: 'search-dateend')}" />
+
+                <button name="search-submit">Rechercher</button>
+            </form>
+        </div>
+
+        <div id="event-map" data-records="">
+            <f:for each="{events}" as="event">
+                <f:if condition="{event.longitude}">
+                    <f:then>
+                        <i class="event-geodata" style="display: none;"
+                           data-id="{event.id}"
+                           data-long="{event.longitude}"
+                           data-lat="{event.latitude}"
+                           data-label="<b>{event.name}</b><br/>{event.locAndDate}">
+                        </i>
+                    </f:then>
+                </f:if>
+            </f:for>
+        </div>
+    </div>
+
+    <div class="events-results">
+        <f:if condition="{events -> f:count()} == 0">
+            <span>Aucun résultat</span>
+        </f:if>
+
+        <f:for each="{events}" as="event">
+            <div class="event" data-id="{event.id}">
+                <div class="event-preview">
+
+                    <div class="event-poster">
+                        <f:if condition="{event.image}">
+                            <f:then>
+                                <img src='{event.image}' alt="poster" />
+                            </f:then>
+                            <f:else>
+                                <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
+                            </f:else>
+                        </f:if>
+                    </div>
+
+                    <div class="event-summary">
+                <span class="event-name">
+                    {event.name}
+                </span>
+                        <span class="event-loc-date">
+                    {event.locAndDate}
+                </span>
+                        <span class="event-description">
+                    {event.shortDescription}
+                </span>
+                    </div>
+                </div>
+
+                <f:link.page class="event-see"
+                             additionalParams="{eventId: event.id}">
+                    <i class="fa fa-plus" style="margin-right: 5px;"></i>
+                    <span>Plus d'infos</span>
+                </f:link.page>
+            </div>
+        </f:for>
+    </div>
+</div>

+ 54 - 0
ot_templating/Resources/Private/Partials/Classic/EventsShow.html

@@ -0,0 +1,54 @@
+<div class="ot-show-event">
+
+    <header>
+        <h2 class="event-name">{event.name}</h2>
+        <f:link.action class="go-back"><i class="fa fa-list"> </i> Revenir à la liste des évènements</f:link.action>
+    </header>
+
+    <div class="event-content">
+
+        <div class="event-poster">
+            <f:if condition="{event.image}">
+                <f:then>
+                    <img src='{event.image}' alt="poster" />
+                </f:then>
+                <f:else>
+                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
+                </f:else>
+            </f:if>
+        </div>
+
+        <div class="event-summary">
+            <table class="event-infos">
+                <tr>
+                    <td>Quand?</td>
+                    <td>
+                        {event.formattedDates}
+                    </td>
+                </tr>
+                <tr>
+                    <td>Où?</td>
+                    <td>
+                        {f:format.nl2br(value: '{event.fullAdress}')}
+                    </td>
+                </tr>
+            </table>
+        </div>
+    </div>
+    <p class="event-description">
+        {f:format.nl2br(value: '{event.description}')}
+    </p>
+    <f:if condition="{event.longitude}">
+        <f:then>
+            <div id="event-map">
+                <i class="event-geodata" style="display: none;"
+                   data-id="{event.id}"
+                   data-long="{event.longitude}"
+                   data-lat="{event.latitude}"
+                   data-label="<b>{event.name}</b><br/>{event.locAndDate}">
+                </i>
+            </div>
+        </f:then>
+    </f:if>
+
+</div>

+ 55 - 125
ot_templating/Resources/Private/Partials/Classic/NextEvents.html

@@ -9,13 +9,29 @@
 <div class="ot-box ot-events">
     <div class="events-list">
         <header>
-            <h3>Nos prochains évènements</h3>
+            <f:if condition="{fromParents}">
+                <f:then>
+                    <h3>Prochains événements de notre réseau</h3>
+                </f:then>
+                <f:else>
+                    <f:if condition="{fromChildren}">
+                        <f:then>
+                            <h3>Prochains événements de nos structures</h3>
+                        </f:then>
+                        <f:else>
+                            <h3>Nos prochains évènements</h3>
+                        </f:else>
+                    </f:if>
+                </f:else>
+            </f:if>
         </header>
 
         <ot:events.getNext as="events"
                            organizationId="{settings.organizationId}"
                            limit="{settings.eventsLimit}"
-                           period="{settings.eventsPeriod}">
+                           period="{settings.eventsPeriod}"
+                           fromParents="{fromParents}"
+                           fromChildren="{fromChildren}">
 
             <f:for each="{events}" as="event">
 
@@ -40,13 +56,27 @@
                             {f:format.date(date: event.datetimeStart,
                                            format: "\l\e d-m-Y \à H\hi")}
                         </span>
-                        <f:if condition="{eventsPageUid} > 0"><f:then>
-                            <span class="event-see">
-                                <f:link.action pageUid="{eventsPageUid}" action="show" arguments="{eventId: event.id}">
-                                    Plus d'infos
-                                </f:link.action>
-                            </span>
-                        </f:then></f:if>
+                        <f:if condition="{eventsPageUid} > 0">
+                            <f:then>
+                                <span class="event-see">
+                                    <f:if condition="{fromParents}||{fromChildren}">
+                                        <f:then>
+                                            <a href="https://{event.subDomain}.opentalent.fr"
+                                               target="_blank">
+                                                Plus d'infos
+                                            </a>
+                                        </f:then>
+                                        <f:else>
+                                            <f:link.page pageUid="{eventsPageUid}"
+                                                         additionalParams="{eventId: event.id}">
+                                                Plus d'infos
+                                            </f:link.page>
+                                        </f:else>
+                                    </f:if>
+                                </span>
+
+                        </f:then>
+                        </f:if>
                     </div>
 
                 </div>
@@ -54,127 +84,27 @@
 
             <f:if condition="{events -> f:count()} == 0">
                 <f:then>
-                    <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
+                    <span class="no-events">
+                        Aucun évènement dans les prochaines semaines
+                    </span>
                 </f:then>
             </f:if>
         </ot:events.getNext>
 
         <footer>
-            <f:if condition="{eventsPageUid} > 0"><f:then>
-                <div class="event-see-all">
-                    <f:link.page pageUid="{eventsPageUid}">
-                        Voir tous les évènements
-                    </f:link.page>
-                </div>
-            </f:then></f:if>
+            <f:if condition="{fromParents}||{fromChildren}">
+                <f:then>
+                </f:then>
+                <f:else>
+                    <f:if condition="{eventsPageUid} > 0"><f:then>
+                        <div class="event-see-all">
+                            <f:link.page pageUid="{eventsPageUid}">
+                                Voir tous les évènements
+                            </f:link.page>
+                        </div>
+                    </f:then></f:if>
+                </f:else>
+            </f:if>
         </footer>
     </div>
-
-    <v:condition.variable.isset name="networkEvents">
-        <div class="events-list">
-            <header>
-                <h3>Prochains événements de notre réseau</h3>
-            </header>
-
-
-            <ot:events.getNext as="networkEvents"
-                               organizationId="{settings.organizationId}"
-                               limit="{settings.eventsLimit}"
-                               period="{settings.eventsPeriod}"
-                               fromParents="1" >
-
-                <f:for each="{networkEvents}" as="event">
-
-                    <div class="event-card">
-
-                        <div class="event-poster">
-                            <f:if condition="{event.image}">
-                                <f:then>
-                                    <img src='{event.image}' alt="poster" />
-                                </f:then>
-                                <f:else>
-                                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                </f:else>
-                            </f:if>
-                        </div>
-
-                        <div class="event-summary">
-                            <span class="event-name">
-                                {event.name}
-                            </span>
-                            <span class="event-date">
-                                {f:format.date(date: event.datetimeStart,
-                                               format: "\l\e d-m-Y \à H\hi")}
-                            </span>
-                            <span class="event-see">
-                                <a href="https://{event.subDomain}.opentalent.fr" target="_blank">Plus d'infos</a>
-                            </span>
-                        </div>
-
-                    </div>
-                </f:for>
-
-                <f:if condition="{networkEvents -> f:count()} == 0">
-                    <f:then>
-                        <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
-                    </f:then>
-                </f:if>
-
-            </ot:events.getNext>
-
-        </div>
-    </v:condition.variable.isset>
-
-    <v:condition.variable.isset name="structuresEvents">
-        <div class="events-list">
-            <header>
-                <h3>Prochains événements de nos structures</h3>
-            </header>
-
-            <ot:events.getNext as="structuresEvents"
-                               organizationId="{settings.organizationId}"
-                               limit="{settings.eventsLimit}"
-                               period="{settings.eventsPeriod}"
-                               fromChildren="1" >
-
-                <f:for each="{structuresEvents}" as="event">
-
-                    <div class="event-card">
-
-                        <div class="event-poster">
-                            <f:if condition="{event.image}">
-                                <f:then>
-                                    <img src='{event.image}' alt="poster" />
-                                </f:then>
-                                <f:else>
-                                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                </f:else>
-                            </f:if>
-                        </div>
-
-                        <div class="event-summary">
-                            <span class="event-name">
-                                {event.name}
-                            </span>
-                            <span class="event-date">
-                                {f:format.date(date: event.datetimeStart,
-                                               format: "\l\e d-m-Y \à H\hi")}
-                            </span>
-                            <span class="event-see">
-                                <a href="https://{event.subDomain}.opentalent.fr" target="_blank">Plus d'infos</a>
-                            </span>
-                        </div>
-
-                    </div>
-                </f:for>
-
-                <f:if condition="{structuresEvents -> f:count()} == 0">
-                    <f:then>
-                        <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
-                    </f:then>
-                </f:if>
-            </ot:events.getNext>
-
-        </div>
-    </v:condition.variable.isset>
 </div>

+ 90 - 0
ot_templating/Resources/Private/Partials/Modern/EventsIndex.html

@@ -0,0 +1,90 @@
+{namespace ot=Opentalent\OtTemplating\ViewHelpers}
+
+<f:comment><!-- All events --></f:comment>
+
+<div class="ot-all-events">
+    <div class="events-controls">
+        <div class="event-search">
+            <h3>Rechercher un évènement: </h3>
+            <form>
+                <input type="text"
+                       name="search-loc"
+                       placeholder="Où?"
+                       value="{ot:request.getArgument(argument: 'search-loc')}"/>
+                <input type="text"
+                       name="search-name"
+                       placeholder="Quoi?"
+                       value="{ot:request.getArgument(argument: 'search-name')}" />
+                <input type="text"
+                       name="search-datestart"
+                       placeholder="Depuis le..."
+                       class="datepicker datetimepicker"
+                       value="{ot:request.getArgument(argument: 'search-datestart')}" />
+                <input type="text"
+                       name="search-dateend"
+                       placeholder="Jusqu'au..."
+                       class="datepicker datetimepicker"
+                       value="{ot:request.getArgument(argument: 'search-dateend')}" />
+
+                <button name="search-submit">Rechercher</button>
+            </form>
+        </div>
+
+        <div id="event-map" data-records="">
+            <f:for each="{events}" as="event">
+                <f:if condition="{event.longitude}">
+                    <f:then>
+                        <i class="event-geodata" style="display: none;"
+                           data-id="{event.id}"
+                           data-long="{event.longitude}"
+                           data-lat="{event.latitude}"
+                           data-label="<b>{event.name}</b><br/>{event.locAndDate}">
+                        </i>
+                    </f:then>
+                </f:if>
+            </f:for>
+        </div>
+    </div>
+
+    <div class="events-results">
+        <f:if condition="{events -> f:count()} == 0">
+            <span>Aucun résultat</span>
+        </f:if>
+
+        <f:for each="{events}" as="event">
+            <div class="event" data-id="{event.id}">
+                <div class="event-preview">
+
+                    <div class="event-poster">
+                        <f:if condition="{event.image}">
+                            <f:then>
+                                <img src='{event.image}' alt="poster" />
+                            </f:then>
+                            <f:else>
+                                <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
+                            </f:else>
+                        </f:if>
+                    </div>
+
+                    <div class="event-summary">
+                <span class="event-name">
+                    {event.name}
+                </span>
+                        <span class="event-loc-date">
+                    {event.locAndDate}
+                </span>
+                        <span class="event-description">
+                    {event.shortDescription}
+                </span>
+                    </div>
+                </div>
+
+                <f:link.page class="event-see"
+                             additionalParams="{eventId: event.id}">
+                    <i class="fa fa-plus" style="margin-right: 5px;"></i>
+                    <span>Plus d'infos</span>
+                </f:link.page>
+            </div>
+        </f:for>
+    </div>
+</div>

+ 54 - 0
ot_templating/Resources/Private/Partials/Modern/EventsShow.html

@@ -0,0 +1,54 @@
+<div class="ot-show-event">
+
+    <header>
+        <h2 class="event-name">{event.name}</h2>
+        <f:link.action class="go-back"><i class="fa fa-list"> </i> Revenir à la liste des évènements</f:link.action>
+    </header>
+
+    <div class="event-content">
+
+        <div class="event-poster">
+            <f:if condition="{event.image}">
+                <f:then>
+                    <img src='{event.image}' alt="poster" />
+                </f:then>
+                <f:else>
+                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
+                </f:else>
+            </f:if>
+        </div>
+
+        <div class="event-summary">
+            <table class="event-infos">
+                <tr>
+                    <td>Quand?</td>
+                    <td>
+                        {event.formattedDates}
+                    </td>
+                </tr>
+                <tr>
+                    <td>Où?</td>
+                    <td>
+                        {f:format.nl2br(value: '{event.fullAdress}')}
+                    </td>
+                </tr>
+            </table>
+        </div>
+    </div>
+    <p class="event-description">
+        {f:format.nl2br(value: '{event.description}')}
+    </p>
+    <f:if condition="{event.longitude}">
+        <f:then>
+            <div id="event-map">
+                <i class="event-geodata" style="display: none;"
+                   data-id="{event.id}"
+                   data-long="{event.longitude}"
+                   data-lat="{event.latitude}"
+                   data-label="<b>{event.name}</b><br/>{event.locAndDate}">
+                </i>
+            </div>
+        </f:then>
+    </f:if>
+
+</div>

+ 55 - 125
ot_templating/Resources/Private/Partials/Modern/NextEvents.html

@@ -9,13 +9,29 @@
 <div class="ot-box ot-events">
     <div class="events-list">
         <header>
-            <h3>Nos prochains évènements</h3>
+            <f:if condition="{fromParents}">
+                <f:then>
+                    <h3>Prochains événements de notre réseau</h3>
+                </f:then>
+                <f:else>
+                    <f:if condition="{fromChildren}">
+                        <f:then>
+                            <h3>Prochains événements de nos structures</h3>
+                        </f:then>
+                        <f:else>
+                            <h3>Nos prochains évènements</h3>
+                        </f:else>
+                    </f:if>
+                </f:else>
+            </f:if>
         </header>
 
         <ot:events.getNext as="events"
                            organizationId="{settings.organizationId}"
                            limit="{settings.eventsLimit}"
-                           period="{settings.eventsPeriod}">
+                           period="{settings.eventsPeriod}"
+                           fromParents="{fromParents}"
+                           fromChildren="{fromChildren}">
 
             <f:for each="{events}" as="event">
 
@@ -40,13 +56,27 @@
                             {f:format.date(date: event.datetimeStart,
                                            format: "\l\e d-m-Y \à H\hi")}
                         </span>
-                        <f:if condition="{eventsPageUid} > 0"><f:then>
-                            <span class="event-see">
-                                <f:link.action pageUid="{eventsPageUid}" action="show" arguments="{eventId: event.id}">
-                                    Plus d'infos
-                                </f:link.action>
-                            </span>
-                        </f:then></f:if>
+                        <f:if condition="{eventsPageUid} > 0">
+                            <f:then>
+                                <span class="event-see">
+                                    <f:if condition="{fromParents}||{fromChildren}">
+                                        <f:then>
+                                            <a href="https://{event.subDomain}.opentalent.fr"
+                                               target="_blank">
+                                                Plus d'infos
+                                            </a>
+                                        </f:then>
+                                        <f:else>
+                                            <f:link.page pageUid="{eventsPageUid}"
+                                                         additionalParams="{eventId: event.id}">
+                                                Plus d'infos
+                                            </f:link.page>
+                                        </f:else>
+                                    </f:if>
+                                </span>
+
+                            </f:then>
+                        </f:if>
                     </div>
 
                 </div>
@@ -54,127 +84,27 @@
 
             <f:if condition="{events -> f:count()} == 0">
                 <f:then>
-                    <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
+                    <span class="no-events">
+                        Aucun évènement dans les prochaines semaines
+                    </span>
                 </f:then>
             </f:if>
         </ot:events.getNext>
 
         <footer>
-            <f:if condition="{eventsPageUid} > 0"><f:then>
-                <div class="event-see-all">
-                    <f:link.page pageUid="{eventsPageUid}">
-                        Voir tous les évènements
-                    </f:link.page>
-                </div>
-            </f:then></f:if>
+            <f:if condition="{fromParents}||{fromChildren}">
+                <f:then>
+                </f:then>
+                <f:else>
+                    <f:if condition="{eventsPageUid} > 0"><f:then>
+                        <div class="event-see-all">
+                            <f:link.page pageUid="{eventsPageUid}">
+                                Voir tous les évènements
+                            </f:link.page>
+                        </div>
+                    </f:then></f:if>
+                </f:else>
+            </f:if>
         </footer>
     </div>
-
-    <v:condition.variable.isset name="networkEvents">
-        <div class="events-list">
-            <header>
-                <h3>Prochains événements de notre réseau</h3>
-            </header>
-
-
-            <ot:events.getNext as="networkEvents"
-                               organizationId="{settings.organizationId}"
-                               limit="{settings.eventsLimit}"
-                               period="{settings.eventsPeriod}"
-                               fromParents="1" >
-
-                <f:for each="{networkEvents}" as="event">
-
-                    <div class="event-card">
-
-                        <div class="event-poster">
-                            <f:if condition="{event.image}">
-                                <f:then>
-                                    <img src='{event.image}' alt="poster" />
-                                </f:then>
-                                <f:else>
-                                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                </f:else>
-                            </f:if>
-                        </div>
-
-                        <div class="event-summary">
-                            <span class="event-name">
-                                {event.name}
-                            </span>
-                            <span class="event-date">
-                                {f:format.date(date: event.datetimeStart,
-                                               format: "\l\e d-m-Y \à H\hi")}
-                            </span>
-                            <span class="event-see">
-                                <a href="https://{event.subDomain}.opentalent.fr" target="_blank">Plus d'infos</a>
-                            </span>
-                        </div>
-
-                    </div>
-                </f:for>
-
-                <f:if condition="{networkEvents -> f:count()} == 0">
-                    <f:then>
-                        <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
-                    </f:then>
-                </f:if>
-
-            </ot:events.getNext>
-
-        </div>
-    </v:condition.variable.isset>
-
-    <v:condition.variable.isset name="structuresEvents">
-        <div class="events-list">
-            <header>
-                <h3>Prochains événements de nos structures</h3>
-            </header>
-
-            <ot:events.getNext as="structuresEvents"
-                               organizationId="{settings.organizationId}"
-                               limit="{settings.eventsLimit}"
-                               period="{settings.eventsPeriod}"
-                               fromChildren="1" >
-
-                <f:for each="{structuresEvents}" as="event">
-
-                    <div class="event-card">
-
-                        <div class="event-poster">
-                            <f:if condition="{event.image}">
-                                <f:then>
-                                    <img src='{event.image}' alt="poster" />
-                                </f:then>
-                                <f:else>
-                                    <f:image src="EXT:ot_templating/Resources/Public/media/event-default.jpg" alt="poster" />
-                                </f:else>
-                            </f:if>
-                        </div>
-
-                        <div class="event-summary">
-                            <span class="event-name">
-                                {event.name}
-                            </span>
-                            <span class="event-date">
-                                {f:format.date(date: event.datetimeStart,
-                                               format: "\l\e d-m-Y \à H\hi")}
-                            </span>
-                            <span class="event-see">
-                                <a href="https://{event.subDomain}.opentalent.fr" target="_blank">Plus d'infos</a>
-                            </span>
-                        </div>
-
-                    </div>
-                </f:for>
-
-                <f:if condition="{structuresEvents -> f:count()} == 0">
-                    <f:then>
-                        <span class="no-events"><p>Aucun évènement dans les prochaines semaines</p></span>
-                    </f:then>
-                </f:if>
-            </ot:events.getNext>
-
-        </div>
-    </v:condition.variable.isset>
 </div>