diff --git a/source/connector-mobilizon.php b/source/connector-mobilizon.php index 1190223..b9cac8a 100644 --- a/source/connector-mobilizon.php +++ b/source/connector-mobilizon.php @@ -13,6 +13,7 @@ require_once __DIR__ . '/includes/exceptions/GeneralException.php'; require_once __DIR__ . '/includes/exceptions/GroupNotFoundException.php'; require_once __DIR__ . '/includes/Constants.php'; +require_once __DIR__ . '/includes/EventsCache.php'; require_once __DIR__ . '/includes/Settings.php'; require_once __DIR__ . '/includes/DateTimeWrapper.php'; require_once __DIR__ . '/includes/Formatter.php'; diff --git a/source/includes/EventsCache.php b/source/includes/EventsCache.php new file mode 100644 index 0000000..ac0027c --- /dev/null +++ b/source/includes/EventsCache.php @@ -0,0 +1,19 @@ + $url, 'query' => $query, 'limit' => $limit]); + if ($cachedEvents !== false) { + return $cachedEvents; + } + $endpoint = $url . '/api'; - // const dataInCache = SessionCache.get(sessionStorage, { - // url, - // query, - // variables: { limit }, - // }) - // if (dataInCache !== null) { - // return Promise.resolve(dataInCache) - // } $data = self::query($endpoint, $query, ['limit' => $limit]); self::checkData($data); - // SessionCache.add(sessionStorage, { url, query, variables: { limit } }, data) $events = $data['data']['events']['elements']; + EventsCache::set(['url' => $url, 'query' => $query, 'limit' => $limit], $events); return $events; } @@ -86,32 +83,19 @@ final class GraphQlClient { } GRAPHQL; - $endpoint = $url . '/api'; - - // const afterDatetime = DateTimeWrapper.getCurrentDatetimeAsString() - // const dataInCache = SessionCache.get(sessionStorage, { - // url, - // query, - // variables: { afterDatetime, groupName, limit }, - // }) - // if (dataInCache !== null) { - // return Promise.resolve(dataInCache) - // } $afterDatetime = date(\DateTime::ISO8601); + + $cachedEvents = EventsCache::get(['url' => $url, 'query' => $query, 'afterDatetime' => $afterDatetime, 'groupName' => $groupName, 'limit' => $limit]); + if ($cachedEvents !== false) { + return $cachedEvents; + } + + $endpoint = $url . '/api'; $data = self::query($endpoint, $query, ['afterDatetime' => $afterDatetime, 'groupName' => $groupName, 'limit' => $limit]); self::checkData($data); - // return request(url, query, { afterDatetime, groupName, limit }).then( - // (data) => { - // SessionCache.add( - // sessionStorage, - // { url, query, variables: { afterDatetime, groupName, limit } }, - // data - // ) - // return Promise.resolve(data) - // } - // ) $events = $data['data']['group']['organizedEvents']['elements']; + EventsCache::set(['url' => $url, 'query' => $query, 'afterDatetime' => $afterDatetime, 'groupName' => $groupName, 'limit' => $limit], $events); return $events; } diff --git a/source/readme.txt b/source/readme.txt index 4dfcc11..bcc92f4 100644 --- a/source/readme.txt +++ b/source/readme.txt @@ -17,7 +17,7 @@ License: Features - Display events as Gutenberg block, as widget and as shortcut - Display events' title, date, and location, if available -- Cache requests' responses for 2 minutes in the browser's `sessionStorage` +- Cache requests' responses for 2 minutes in the database - Configure number of events to show per block, per widget and per shortcut - Optionally filter events by a specific group per block, per widget and per shortcut - Set the URL of the Mobilizon instance in the settings