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'); }