nouveau-theatre-de-besancon/site/plugins/helpers/index.php
2024-09-10 13:19:51 +02:00

192 lines
5.5 KiB
PHP

<?php
function buildFieldsString($requestFields) {
$fields = [];
foreach ($requestFields as $field) {
if (isset($field['subfields'])) {
$subfields = [];
foreach ($field['subfields'] as $subfield) {
if (isset($subfield['subfields'])) {
$subsubfields = [];
foreach ($subfield['subfields'] as $subsubfield) {
$subsubfields[] = $subsubfield['name'];
}
$subfields[] = $subfield['name'] . '{' . implode(',', $subsubfields) . '}';
} else {
$subfields[] = $subfield['name'];
}
}
$fields[] = $field['name'] . '{' . implode(',', $subfields) . '}';
} else {
$fields[] = $field['name'];
}
}
return '&fields=' . implode(',', $fields);
}
function buildParamsString($requestParams) {
$queryString = [];
foreach ($requestParams as $param) {
$queryString[] = urlencode($param['name']) . '=' . urlencode($param['value']);
}
return implode('&', $queryString);
}
function getEventsByMonth($month) {
$events = page('programme')->children();
}
function fetchMapadoEvent($request) {
$token = site()->mapadoToken();
$requestEndPoint = $request['requestEndPoint'];
$requestParams = $request['requestParams'];
$requestFields = $request['requestFields'];
$url = "https://ticketing.mapado.net/v1/$requestEndPoint?";
$url .= buildParamsString($requestParams);
$url .= buildFieldsString($requestFields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $token
]);
$responseString = curl_exec($ch);
curl_close($ch);
$response = json_decode($responseString);
return $response;
}
function fetchMapadoEvents($request) {
$token = site()->mapadoToken();
$contractId = site()->mapadoContractId();
$requestEndPoint = $request['requestEndPoint'];
$requestParams = $request['requestParams'];
$requestFields = $request['requestFields'];
$url = "https://ticketing.mapado.net/v1/$requestEndPoint?contract=$contractId&";
$url .= buildParamsString($requestParams);
$url .= buildFieldsString($requestFields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $token
]);
$responseString = curl_exec($ch);
curl_close($ch);
$responseJson = json_encode(json_decode($responseString));
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" => "notInStockContingentBookableStock"],
["name" => "totalStock"]
]
],
]
];
return $request;
}
function saveMapadoEvent($mapadoEvent, $page) {
$kirby = kirby();
$kirby->impersonate('kirby');
$duration = '';
$totalStock = null;
$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) {
if (!$totalStock) {
$totalStock = $session->totalStock;
}
$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->notInStockContingentBookableStock
];
}
$dataToSave = [
"mapadoSlug" => $mapadoEvent->slug,
"remoteDuration" => $duration,
"remoteSessions" => $sessionsToSave,
"eventDateId" => $eventDateId,
"totalStock" => $totalStock
];
$page->update($dataToSave);
return $dataToSave;
}
function getEndTime($session) {
$formattedTime = strlen($session['time']) < 4 ? $session['time'] . '00' : $session['time'];
$time1 = DateTime::createFromFormat('Hi', $formattedTime);
if ($time1 === false) {
throw new Exception('format d\'heure invalide : ' . $session['time']);
}
$formattedDuration = strlen($session['duration']) < 4 ? $session['duration'] . '00' : $session['duration'];
$time2 = DateTime::createFromFormat('Hi', $formattedDuration);
if ($time2 === false) {
throw new Exception('format de durée invalide : ' . $session['duration']);
}
$time1->add(new DateInterval('PT' . $time2->format('H') . 'H' . $time2->format('i') . 'M'));
return $time1->format('H:i');
}