1, 'février' => 2, 'mars' => 3, 'avril' => 4, 'mai' => 5, 'juin' => 6, 'juillet' => 7, 'août' => 8, 'septembre' => 9, 'octobre' => 10, 'novembre' => 11, 'décembre' => 12, ]; return $array[$month]; } function splitNextAndPreviousEvents($events) { $next = new Pages(); $previous = new Pages(); $noDateEvents = new Pages(); foreach ($events as $event) { $sessions = $event->isMapadoEvent() == 'true' ? $event->remoteSessions()->toStructure() : $event->sessions()->toStructure(); $sessionDates = $sessions->map(function($session) { return $session->date()->value(); })->data; if (empty($sessionDates)) { $noDateEvents->add($event); continue; } $futureDates = array_filter($sessionDates, function ($date) { $oneDayInSecond = 24 * 60 * 60; $dateTimeStamp = strtotime($date) + $oneDayInSecond; return $dateTimeStamp >= time(); }); if (!empty($futureDates)) { $next->add($event); } else { $previous->add($event); } } $next = $next->merge($noDateEvents); return [ 'next' => $next, 'previous' => $previous, ]; } 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; $sessionsToSave[] = [ "date" => substr($session->startDate, 0, 10), "time" => str_replace(':', 'h', $startTime), "ticketingUrl" => $ticketingUrl, "bookableStock" => $session->notInStockContingentBookableStock ]; } $dataToSave = [ "mapadoSlug" => $mapadoEvent->slug, "remoteSessions" => $sessionsToSave, "eventDateId" => $eventDateId, "totalStock" => $totalStock ]; $page->update($dataToSave); return $dataToSave; } function getEndTime($session) { $formattedTime = preg_replace('/[^0-9]/', '', $session['time']); $formattedTime = strlen($formattedTime) < 4 ? str_pad($formattedTime, 4, '0', STR_PAD_RIGHT) : $formattedTime; $time1 = DateTime::createFromFormat('Hi', $formattedTime); if ($time1 === false) { throw new Exception('format d\'heure invalide : ' . $session['time']); } $formattedDuration = preg_replace('/[^0-9]/', '', $session['duration']); $formattedDuration = strlen($formattedDuration) < 4 ? str_pad($formattedDuration, 4, '0', STR_PAD_RIGHT) : $formattedDuration; $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'); }