Making WordPress.org

Changeset 9797


Ignore:
Timestamp:
04/30/2020 08:17:12 PM (6 years ago)
Author:
iandunn
Message:

Events: Determine the next online camp dynamically.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/api.wordpress.org/public_html/events/1.0/index.php

    r9796 r9797  
    12661266 */
    12671267function pin_next_online_wordcamp( $events, $user_agent, $current_time ) {
     1268        global $wpdb, $cache_group, $cache_life;
     1269
    12681270        // Re-evaluate pinning after July, per https://make.wordpress.org/core/2020/04/02/showing-online-wordcamps-in-the-events-widget/#comment-38480.
    12691271        if ( $current_time >= strtotime( 'August 1 2020' ) ) {
    … …  
    12751277        }
    12761278
    1277         if ( $current_time < strtotime( 'May 10, 2020' ) ) {
    1278                 $spain = array(
    1279                         'type'       => 'wordcamp',
    1280                         'title'      => 'WordCamp Spain',
    1281                         'url'        => 'https://2020.spain.wordcamp.org/',
    1282                         'meetup'     => '',
    1283                         'meetup_url' => '',
    1284                         'date'       => '2020-05-06 12:00:00',
    1285                         'location'   => array(
    1286                                 'location' => 'Online',
    1287                         ),
     1279        $cache_key        = 'next_online_wordcamp';
     1280        $next_online_camp = wp_cache_get( $cache_key, $cache_group );
     1281
     1282        // `false` is a cache miss, the `none scheduled` string is a cache hit but when the SQL query returned 0 results.
     1283        if ( false === $next_online_camp ) {
     1284                $raw_camp = $wpdb->get_row( "
     1285                        SELECT
     1286                                `title`, `url`, `meetup`, `meetup_url`, `date_utc`, `end_date`, `country`, `latitude`, `longitude`
     1287                        FROM `wporg_events`
     1288                        WHERE
     1289                                type     = 'wordcamp'  AND
     1290                                status   = 'scheduled' AND
     1291                                location = 'online'    AND
     1292                                date_utc BETWEEN CURDATE() AND CURDATE() + INTERVAL 2 WEEK
     1293                        ORDER BY `date_utc` ASC
     1294                        LIMIT 1"
    12881295                );
    12891296
    1290                 array_unshift( $events, $spain );
     1297                if ( isset( $raw_camp->url ) ) {
     1298                        $next_online_camp = array(
     1299                                'type'       => 'wordcamp',
     1300                                'title'      => $raw_camp->title,
     1301                                'url'        => $raw_camp->url,
     1302                                'meetup'     => $raw_camp->meetup,
     1303                                'meetup_url' => $raw_camp->meetup_url,
     1304                                'date'       => $raw_camp->date_utc,
     1305                                'end_date'   => $raw_camp->end_date,
     1306
     1307                                'location'   => array(
     1308                                        'location'  => 'Online',
     1309                                        'country'   => $raw_camp->country,
     1310                                        'latitude'  => (float) $raw_camp->latitude,
     1311                                        'longitude' => (float) $raw_camp->longitude,
     1312                                )
     1313                        );
     1314
     1315                } else {
     1316                        /*
     1317                         * Cache a string instead of `false`, to disambiguate between cache-misses, and cache-hits with 0 results.
     1318                         * `wp_cache_get()` from the `memcached` plugin doesn't support the `$found` parameter, so this has to be
     1319                         * done manually.
     1320                         */
     1321                        $next_online_camp = 'none scheduled';
     1322                }
     1323
     1324                /*
     1325                 * This intentionally stores a cache value when there are 0 results, because that's a normal condition;
     1326                 * i.e., there aren't currently any online WordCamps on the schedule. If nothing were cached in that
     1327                 * situation, then this would run a query on every request, which wouldn't be performant at scale.
     1328                 */
     1329                wp_cache_set( $cache_key, $next_online_camp, $cache_group, $cache_life );
     1330        }
     1331
     1332        if ( isset( $next_online_camp['url'] ) ) {
     1333                array_unshift( $events, $next_online_camp );
    12911334        }
    12921335
Note: See TracChangeset for help on using the changeset viewer.