WordPress.org

Making WordPress.org

Ticket #2820: 2820-auth.diff

File 2820-auth.diff, 4.6 KB (added by coreymckrill, 4 years ago)

work in progress

  • wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php

    diff --git wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php
    index 412b80668..c7a25ec1c 100644
    Author: WordPress.org Meta Team 
    88*/
    99
    1010class Official_WordPress_Events {
    11         const EVENTS_TABLE          = 'wporg_events';
    12         const WORDCAMP_API_BASE_URL = 'https://central.wordcamp.org/wp-json/';
    13         const MEETUP_API_BASE_URL   = 'https://api.meetup.com/';
    14         const MEETUP_MEMBER_ID      = 72560962;
     11        const EVENTS_TABLE            = 'wporg_events';
     12        const WORDCAMP_API_BASE_URL   = 'https://central.wordcamp.org/wp-json/';
     13        const MEETUP_API_BASE_URL     = 'https://api.meetup.com/';
     14        const MEETUP_MEMBER_ID        = 72560962;
     15        const DOORKEEPER_API_BASE_URL = 'https://api.doorkeeper.jp/';
     16        const DOORKEEPER_API_TOKEN    = ''; // @todo
    1517
    1618        /*
    1719         * @todo
    class Official_WordPress_Events { 
    181183         * @return array
    182184         */
    183185        protected function fetch_upcoming_events() {
    184                 $events = array_merge( $this->get_wordcamp_events(), $this->get_meetup_events() );
     186                $events = array_merge(
     187                        $this->get_wordcamp_events(),
     188                        $this->get_meetup_events(),
     189                        $this->get_jp_doorkeeper_events()
     190                );
    185191
    186192                return $events;
    187193        }
    class Official_WordPress_Events { 
    427433
    428434                return $group_ids;
    429435        }
     436        /**
     437         * Get WordPress meetups from Doorkeeper API
     438         *
     439         * @return array
     440         */
     441        protected function get_jp_doorkeeper_events() {
     442                $utc_offset = 32400;
     443                $events     = array();
     444
     445                /**
     446                 * This list should only include groups that are part of the chapter program.
     447                 */
     448                $groups = array(
     449                        '2504', // WordBench Tokyo @todo
     450                        '4074', // Tokyo WordPress Mokumoku Club @todo
     451                );
     452
     453                foreach ( $groups as $group ) {
     454                        $request_url = sprintf(
     455                                '%1$sgroups/%2$s/events',
     456                                self::DOORKEEPER_API_BASE_URL,
     457                                $group
     458                        );
     459
     460                        $request_args = array(
     461                                'headers' => array(
     462                                        'Authorization: Bearer ' . self::DOORKEEPER_API_TOKEN,
     463                                ),
     464                                'body'    => array(
     465                                        'expand[]' => 'group',
     466                                        'sort'     => 'starts_at',
     467                                ),
     468                        );
     469
     470                        $this->log( 'fetching events from: ' . var_export( $request_url, true ) );
     471
     472                        $response = $this->remote_get( $request_url, $request_args );
     473                        $body     = json_decode( wp_remote_retrieve_body( $response ) );
     474
     475                        $this->log( 'pruned response - ' . print_r( $this->prune_response_for_log( $response ), true ) );
     476
     477                        if ( ! empty ( $body[0] ) ) {
     478                                $meetups = $body[0];
     479
     480                                foreach ( $meetups as $meetup ) {
     481                                        $start_timestamp = $utc_offset + strtotime( $meetup->starts_at ); // convert to seconds
     482                                        $end_timestamp   = $utc_offset + strtotime( $meetup->ends_at );   // convert to seconds
     483
     484                                        //if ( isset( $meetup->venue ) ) {
     485                                        //      $location = $this->format_meetup_venue_location( $meetup->venue );
     486                                        //} else {
     487                                                $geocoded_location = $this->reverse_geocode( $meetup->lat, $meetup->long );
     488                                                $location_parts    = $this->parse_reverse_geocode_address( $geocoded_location->address_components );
     489                                                $location          = sprintf(
     490                                                        '%s%s%s',
     491                                                        $location_parts['city'],
     492                                                        empty( $location_parts['state'] )        ? '' : ', ' . $location_parts['state'],
     493                                                        empty( $location_parts['country_name'] ) ? '' : ', ' . $location_parts['country_name']
     494                                                );
     495                                        //}
     496
     497                                        if ( ! empty( $meetup->venue->country ) ) {
     498                                                $country_code = $meetup->venue->country;
     499                                        } elseif ( ! empty( $location_parts['country_code'] ) ) {
     500                                                $country_code = $location_parts['country_code'];
     501                                        } else {
     502                                                $country_code = '';
     503                                        }
     504
     505                                        $events[] = new Official_WordPress_Event( array(
     506                                                'type'            => 'meetup',
     507                                                'source_id'       => 'doorkeeper-' . $meetup->id,
     508                                                'title'           => $meetup->title,
     509                                                'url'             => $meetup->public_url,
     510                                                'meetup_name'     => $meetup->group->name,
     511                                                'meetup_url'      => $meetup->group->public_url,
     512                                                'description'     => $meetup->description,
     513                                                'num_attendees'   => $meetup->participants,
     514                                                'start_timestamp' => $start_timestamp,
     515                                                'end_timestamp'   => $end_timestamp,
     516                                                'location'        => $location,
     517                                                'country_code'    => $country_code,
     518                                                'latitude'        => $meetup->lat,
     519                                                'longitude'       => $meetup->long,
     520                                        ) );
     521                                }
     522                        }
     523                }
     524
     525                $this->log( sprintf( 'returning %d events', count( $events ) ) );
     526
     527                return $events;
     528        }
     529
    430530
    431531        /**
    432532         * Reverse-geocodes a set of coordinates