update mapado event working
This commit is contained in:
parent
4cd3bfba57
commit
c98d5eb36b
8 changed files with 184 additions and 126 deletions
|
|
@ -4,7 +4,9 @@
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.collapsable > * {
|
.collapsable:not(:first-child) > *,
|
||||||
|
.collapsable:first-child > button,
|
||||||
|
.collapsable .session {
|
||||||
padding: var(--row-padding);
|
padding: var(--row-padding);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
@ -34,6 +36,12 @@
|
||||||
.collapsable__content {
|
.collapsable__content {
|
||||||
font-size: var(--font-size-s);
|
font-size: var(--font-size-s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.collapsable__content .session {
|
||||||
|
font-size: var(--font-size-m);
|
||||||
|
grid-template-columns: 2fr 1fr 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
.collapsable__content .production p:not(:last-child) {
|
.collapsable__content .production p:not(:last-child) {
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,33 @@ function getDatesInMonth(month) {
|
||||||
return dates;
|
return dates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getMapadoEvent(id) {
|
||||||
|
const requestEndPoint = "ticketings/" + id;
|
||||||
|
|
||||||
|
const requestParams = [];
|
||||||
|
|
||||||
|
const requestFields = [
|
||||||
|
{ name: "startDate" },
|
||||||
|
{ name: "bookableStock" },
|
||||||
|
{
|
||||||
|
name: "eventDateList",
|
||||||
|
subfields: [{ name: "@id" }, { name: "bookableStock" }],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const requestOptions = {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ requestEndPoint, requestParams, requestFields }),
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await fetch("/mapado-api.json", requestOptions);
|
||||||
|
const json = await response.json();
|
||||||
|
|
||||||
|
const event = json["hydra:member"];
|
||||||
|
|
||||||
|
console.log(`Événement Mapado`, event);
|
||||||
|
}
|
||||||
|
|
||||||
async function getMapadoDates(monthNumb) {
|
async function getMapadoDates(monthNumb) {
|
||||||
const contractId = "1941";
|
const contractId = "1941";
|
||||||
|
|
||||||
|
|
@ -129,3 +156,20 @@ async function getMergedDates(monthNumb, dates) {
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function updateMapadoEvent(pageUri) {
|
||||||
|
const headers = new Headers();
|
||||||
|
|
||||||
|
const requestOptions = {
|
||||||
|
method: "POST",
|
||||||
|
headers: headers,
|
||||||
|
redirect: "follow",
|
||||||
|
body: JSON.stringify({
|
||||||
|
pageUri,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
|
||||||
|
const response = await fetch("/update-mapado-event.json", requestOptions);
|
||||||
|
const json = await response.json();
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,11 +79,13 @@ tabs:
|
||||||
disabled: true
|
disabled: true
|
||||||
columns:
|
columns:
|
||||||
date:
|
date:
|
||||||
width: 1/3
|
width: 1/4
|
||||||
time:
|
time:
|
||||||
width: 1/3
|
width: 1/4
|
||||||
ticketingUrl:
|
ticketingUrl:
|
||||||
width: 1/3
|
width: 1/4
|
||||||
|
bookableStock:
|
||||||
|
width: 1/4
|
||||||
when:
|
when:
|
||||||
isMapadoEvent: true
|
isMapadoEvent: true
|
||||||
fields:
|
fields:
|
||||||
|
|
@ -91,15 +93,19 @@ tabs:
|
||||||
type: date
|
type: date
|
||||||
icon: calendar
|
icon: calendar
|
||||||
display: DD/MM/YYYY
|
display: DD/MM/YYYY
|
||||||
width: 1/3
|
width: 1/4
|
||||||
time:
|
time:
|
||||||
label: Horaire de début
|
label: Horaire de début
|
||||||
type: text
|
type: text
|
||||||
width: 1/3
|
width: 1/4
|
||||||
ticketingUrl:
|
ticketingUrl:
|
||||||
label: Lien billetterie
|
label: Lien billetterie
|
||||||
type: url
|
type: url
|
||||||
width: 1/3
|
width: 1/4
|
||||||
|
bookableStock:
|
||||||
|
label: Places disponibles
|
||||||
|
type: text
|
||||||
|
width: 1/4
|
||||||
- width: 1/1
|
- width: 1/1
|
||||||
fields:
|
fields:
|
||||||
line:
|
line:
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@ return [
|
||||||
],
|
],
|
||||||
'routes' => [
|
'routes' => [
|
||||||
require_once(__DIR__ . '/routes/mapado-api.php'),
|
require_once(__DIR__ . '/routes/mapado-api.php'),
|
||||||
require_once(__DIR__ . '/routes/month-dates.php')
|
require_once(__DIR__ . '/routes/month-dates.php'),
|
||||||
|
require_once(__DIR__ . '/routes/update-mapado-event.php'),
|
||||||
],
|
],
|
||||||
'hooks' => [
|
'hooks' => [
|
||||||
'page.update:after' => require_once(__DIR__ . '/hooks/update-mapado-event.php')
|
'page.update:after' => require_once(__DIR__ . '/hooks/update-mapado-event.php')
|
||||||
|
|
|
||||||
|
|
@ -1,67 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return function($newPage, $oldPage) {
|
return function($newPage, $oldPage) {
|
||||||
if ($newPage->isMapadoEvent() != 'true') return;
|
if ($newPage->isMapadoEvent() != 'true') return;
|
||||||
$request = [
|
|
||||||
"requestEndPoint" => "ticketings/" . $newPage->mapadoId()->value(),
|
$request = createMapadoEventRequest($newPage);
|
||||||
"requestParams" => [],
|
|
||||||
"requestFields" => [
|
|
||||||
["name" => "title"],
|
|
||||||
["name" => "address"],
|
|
||||||
["name" => "slug"],
|
|
||||||
[
|
|
||||||
"name" => "eventDateList",
|
|
||||||
"subfields" => [
|
|
||||||
["name" => "startDate"],
|
|
||||||
["name" => "endDate"],
|
|
||||||
["name" => "bookableStock"]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
$mapadoEvent = fetchMapadoEvent($request);
|
$mapadoEvent = fetchMapadoEvent($request);
|
||||||
$duration = null;
|
|
||||||
$sessionsToSave = [];
|
|
||||||
|
|
||||||
if ($mapadoEvent->{"@type"} === 'hydra:Error') {
|
|
||||||
|
|
||||||
$error = null;
|
|
||||||
if ($newPage->mapadoId()->isEmpty()) {
|
|
||||||
$error = 'Entrez l\'identifiant de l\'événement Mapado dans l\'onglet "Réglages".';
|
|
||||||
} else {
|
|
||||||
$error = 'Aucun événement Mapado ne correspond à l\'identifiant ' . $newPage->mapado()->value() . '. En êtes-vous sûr•e ?';
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Exception($error, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
saveMapadoEvent($mapadoEvent, $newPage);
|
||||||
foreach ($mapadoEvent->eventDateList as $session) {
|
|
||||||
|
|
||||||
$sessionMonth = substr($session->startDate, 0, 7);
|
|
||||||
|
|
||||||
$day = intval(substr($session->startDate, 8, 2));
|
|
||||||
$startTime = substr($session->startDate, 11, 5);
|
|
||||||
$eventDateId = explode('/', $session->{'@id'});
|
|
||||||
$eventDateId = $eventDateId[count($eventDateId) - 1];
|
|
||||||
$ticketingUrl = option('ticketingUrl') . 'event/' . $mapadoEvent->slug . '?eventDate=' . $eventDateId;
|
|
||||||
|
|
||||||
if (isset($session->endDate) && !$duration) {
|
|
||||||
$endTime = substr($session->endDate, 11 , 5);
|
|
||||||
$duration = getTimeDifference($startTime, $endTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
$sessionsToSave[] = [
|
|
||||||
"date" => substr($session->startDate, 0, 10),
|
|
||||||
"time" => str_replace(':', 'h', $startTime),
|
|
||||||
'ticketingUrl' => $ticketingUrl
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$newPage->update([
|
|
||||||
"mapadoSlug" => $mapadoEvent->slug,
|
|
||||||
"remoteDuration" => $duration,
|
|
||||||
"remoteSessions" => $sessionsToSave
|
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
|
|
@ -3,67 +3,15 @@
|
||||||
return [
|
return [
|
||||||
'pattern' => '/update-mapado-event.json',
|
'pattern' => '/update-mapado-event.json',
|
||||||
'method' => 'POST',
|
'method' => 'POST',
|
||||||
'action' => function () {
|
'action' => function() {
|
||||||
$jsonRequest = file_get_contents("php://input");
|
$jsonRequest = file_get_contents("php://input");
|
||||||
$request = json_decode($jsonRequest, true);
|
$request = json_decode($jsonRequest, true);
|
||||||
|
|
||||||
$id = $request['id'];
|
$page = page($request['pageUri']);
|
||||||
|
|
||||||
$request = [
|
|
||||||
"requestEndPoint" => "ticketings/" . $id,
|
|
||||||
"requestParams" => [],
|
|
||||||
"requestFields" => [
|
|
||||||
["name" => "title"],
|
|
||||||
["name" => "address"],
|
|
||||||
["name" => "slug"],
|
|
||||||
[
|
|
||||||
"name" => "eventDateList",
|
|
||||||
"subfields" => [
|
|
||||||
["name" => "startDate"],
|
|
||||||
["name" => "endDate"],
|
|
||||||
["name" => "bookableStock"]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
|
$request = createMapadoEventRequest($page);
|
||||||
$mapadoEvent = fetchMapadoEvent($request);
|
$mapadoEvent = fetchMapadoEvent($request);
|
||||||
$duration = null;
|
|
||||||
$sessionsToSave = [];
|
|
||||||
|
|
||||||
foreach ($mapadoEvent->eventDateList as $session) {
|
|
||||||
|
|
||||||
$sessionMonth = substr($session->startDate, 0, 7);
|
|
||||||
|
|
||||||
if ($sessionMonth === $requestMonth) {
|
|
||||||
$day = intval(substr($session->startDate, 8, 2));
|
|
||||||
$startTime = substr($session->startDate, 11, 5);
|
|
||||||
$eventDateId = explode('/', $session->{'@id'});
|
|
||||||
$eventDateId = $eventDateId[count($eventDateId) - 1];
|
|
||||||
|
|
||||||
if (isset($session->endDate) && !$duration) {
|
|
||||||
$endTime = substr($session->endDate, 11 , 5);
|
|
||||||
$duration = getTimeDifference($startTime, $endTime);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$dates[$day][] = array_merge($eventInfos, [
|
|
||||||
"day" => $day,
|
|
||||||
"time" => str_replace(':', 'h', $startTime),
|
|
||||||
"duration" => $duration,
|
|
||||||
"ticketingUrl" => option('ticketingUrl') . 'event/' . $mapadoEvent->slug . '?eventDate=' . $eventDateId
|
|
||||||
]);
|
|
||||||
|
|
||||||
$sessionsToSave[] = [
|
|
||||||
"date" => substr($session->startDate, 0, 10),
|
|
||||||
"time" => str_replace(':', 'h', $startTime)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$event->update([
|
return saveMapadoEvent($mapadoEvent, $page);
|
||||||
"remoteDuration" => $duration,
|
|
||||||
"remoteSessions" => $sessionsToSave
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
@ -87,4 +87,80 @@ function fetchMapadoEvents($request) {
|
||||||
$responseJson = json_encode(json_decode($responseString));
|
$responseJson = json_encode(json_decode($responseString));
|
||||||
|
|
||||||
return $responseJson;
|
return $responseJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createMapadoEventRequest($page) {
|
||||||
|
$request = [
|
||||||
|
"requestEndPoint" => "ticketings/" . $page->mapadoId()->value(),
|
||||||
|
"requestParams" => [],
|
||||||
|
"requestFields" => [
|
||||||
|
["name" => "title"],
|
||||||
|
["name" => "address"],
|
||||||
|
["name" => "slug"],
|
||||||
|
[
|
||||||
|
"name" => "eventDateList",
|
||||||
|
"subfields" => [
|
||||||
|
["name" => "startDate"],
|
||||||
|
["name" => "endDate"],
|
||||||
|
["name" => "bookableStock"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return $request;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveMapadoEvent($mapadoEvent, $page) {
|
||||||
|
$kirby = kirby();
|
||||||
|
$kirby->impersonate('kirby');
|
||||||
|
|
||||||
|
$duration = '';
|
||||||
|
$sessionsToSave = [];
|
||||||
|
|
||||||
|
if ($mapadoEvent->{"@type"} === 'hydra:Error') {
|
||||||
|
|
||||||
|
$error = null;
|
||||||
|
if ($page->mapadoId()->isEmpty()) {
|
||||||
|
$error = 'Entrez l\'identifiant de l\'événement Mapado dans l\'onglet "Réglages".';
|
||||||
|
} else {
|
||||||
|
$error = 'Aucun événement Mapado ne correspond à l\'identifiant ' . $page->mapado()->value() . '. En êtes-vous sûr•e ?';
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Exception($error, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($mapadoEvent->eventDateList as $session) {
|
||||||
|
|
||||||
|
$sessionMonth = substr($session->startDate, 0, 7);
|
||||||
|
|
||||||
|
$day = intval(substr($session->startDate, 8, 2));
|
||||||
|
$startTime = substr($session->startDate, 11, 5);
|
||||||
|
$eventDateId = explode('/', $session->{'@id'});
|
||||||
|
$eventDateId = $eventDateId[count($eventDateId) - 1];
|
||||||
|
$ticketingUrl = option('ticketingUrl') . 'event/' . $mapadoEvent->slug . '?eventDate=' . $eventDateId;
|
||||||
|
|
||||||
|
if (isset($session->endDate) && !$duration) {
|
||||||
|
$endTime = substr($session->endDate, 11 , 5);
|
||||||
|
$duration = getTimeDifference($startTime, $endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
$sessionsToSave[] = [
|
||||||
|
"date" => substr($session->startDate, 0, 10),
|
||||||
|
"time" => str_replace(':', 'h', $startTime),
|
||||||
|
"ticketingUrl" => $ticketingUrl,
|
||||||
|
"bookableStock" => $session->bookableStock
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$dataToSave = [
|
||||||
|
"mapadoSlug" => $mapadoEvent->slug,
|
||||||
|
"remoteDuration" => $duration,
|
||||||
|
"remoteSessions" => $sessionsToSave
|
||||||
|
];
|
||||||
|
|
||||||
|
$page->update($dataToSave);
|
||||||
|
|
||||||
|
return $dataToSave;
|
||||||
}
|
}
|
||||||
|
|
@ -19,6 +19,38 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="collapsable-sections">
|
<section class="collapsable-sections">
|
||||||
|
<?php snippet('collapsable-section', ['title' => 'Prenez vos places !'], slots: true) ?>
|
||||||
|
<?php slot('content') ?>
|
||||||
|
<div
|
||||||
|
class="sessions"
|
||||||
|
x-data="{
|
||||||
|
sessions: null,
|
||||||
|
async fetchSessions() {
|
||||||
|
this.sessions = await updateMapadoEvent('<?= $page->uri() ?>');
|
||||||
|
console.log(this.sessions);
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
x-init="fetchSessions()"
|
||||||
|
>
|
||||||
|
<?php
|
||||||
|
$sessions = $page->isMapadoEvent() != 'true' ? $page->sessions()->toStructure() : $page->remoteSessions()->toStructure();
|
||||||
|
|
||||||
|
foreach ($sessions as $session) :
|
||||||
|
$date = new DateTime($session->date());
|
||||||
|
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
|
||||||
|
$formattedDate = $formatter->format($date);
|
||||||
|
?>
|
||||||
|
<div class="session grid">
|
||||||
|
<p><?= $formattedDate ?></p>
|
||||||
|
<p><?= $session->time() ?></p>
|
||||||
|
<p><?= $page->place() ?></p>
|
||||||
|
<p>test</p>
|
||||||
|
</div>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
||||||
|
<?php endslot() ?>
|
||||||
|
<?php endsnippet() ?>
|
||||||
|
|
||||||
<?php snippet('collapsable-section', ['title' => 'Distribution et production'], slots: true) ?>
|
<?php snippet('collapsable-section', ['title' => 'Distribution et production'], slots: true) ?>
|
||||||
<?php slot('content') ?>
|
<?php slot('content') ?>
|
||||||
<div class="production">
|
<div class="production">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue