Changeset 11393 for sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php
- Timestamp:
- 12/22/2021 02:08:56 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/official-wordpress-events/official-wordpress-events.php
r11153 r11393 552 552 $events = array(); 553 553 554 // Fetching events for a large number of groups from the Meetup API is currently a very inefficient process.555 ini_set( 'memory_limit', '900M' );556 ini_set( 'max_execution_time', 500 );557 558 554 $meetup_client = $this->get_meetup_client(); 559 555 if ( ! empty( $meetup_client->error->errors ) ) { … … 562 558 } 563 559 564 $groups = $meetup_client->get_groups(); 565 if ( ! empty( $meetup_client->error->errors ) ) { 566 $this->log( 'Failed to fetch groups: ' . wp_json_encode( $meetup_client->error ), true ); 567 return $events; 568 } 569 570 $this->log( sprintf( 'received %d meetup groups', count( $groups ) ) ); 571 572 $yesterday = date( 'c', strtotime( '-1 day' ) ); 573 $one_year_out = date( 'c', strtotime( '+1 year' ) ); 574 $meetups = $meetup_client->get_events( 575 wp_list_pluck( $groups, 'urlname' ), 560 $meetups = $meetup_client->get_network_events( 576 561 array( 577 562 // We want cancelled events too so they will be updated in our database table. 578 'status' => 'upcoming,cancelled',563 'status' => false, // We want PAST, UPCOMING, CANCELLED. We'll let the below date cutoff take care of the PAST events. 579 564 // We don't want cancelled events in the past, but need some leeway here for timezones. 580 ' no_earlier_than' => substr( $yesterday, 0, strpos( $yesterday, '+' )),565 'min_event_date' => strtotime( '-1 day' ), 581 566 // We don't need to cache events happening more than a year from now. 582 ' no_later_than' => substr( $one_year_out, 0, strpos( $one_year_out, '+' )),567 'max_event_date' => strtotime( '+1 year' ), 583 568 ) 584 569 ); … … 625 610 $longitude = ! empty( $meetup['venue']['lon'] ) ? $meetup['venue']['lon'] : $meetup['group']['lon']; 626 611 627 if ( isset( $meetup['venue'] ) ) {628 $location = $ this->format_meetup_venue_location( $meetup['venue'] );612 if ( ! empty( $meetup['venue']['localized_location'] ) ) { 613 $location = $meetup['venue']['localized_location']; 629 614 } else { 630 615 $geocoded_location = $this->reverse_geocode( $latitude, $longitude ); … … 752 737 753 738 /** 754 * Format a meetup venue's location755 *756 * @param object $venue757 *758 * @return string759 */760 protected function format_meetup_venue_location( $venue ) {761 $location = array();762 763 if ( isset( $venue['id'] ) && 26906060 === $venue['id'] ) {764 return 'online';765 }766 767 foreach ( array( 'city', 'state', 'localized_country_name' ) as $part ) {768 if ( ! empty( $venue[ $part ] ) ) {769 if ( in_array( $part, array( 'state' ) ) ) {770 $location[] = strtoupper( $venue[ $part ] );771 } else {772 $location[] = $venue[ $part ];773 }774 }775 }776 777 return implode( ', ', $location );778 }779 780 /**781 739 * Mark Meetup events as deleted in our database when they're deleted from Meetup.com. 782 740 * … … 792 750 global $wpdb; 793 751 794 $chunked_db_events = array(); 795 796 // Don't include anything before tomorrow, because time zone differences could result in past events being flagged. 752 $meetup_client = $this->get_meetup_client(); 753 if ( ! empty( $meetup_client->error->errors ) ) { 754 $this->log( 'Failed to instantiate meetup client: ' . wp_json_encode( $meetup_client->error ), true ); 755 return; 756 } 757 797 758 $raw_events = $wpdb->get_results( " 798 SELECT id, source_id , meetup_url759 SELECT id, source_id 799 760 FROM `". self::EVENTS_TABLE ."` 800 761 WHERE 801 762 type = 'meetup' AND 802 763 status = 'scheduled' AND 803 date_utc >= DATE_ADD( NOW(), INTERVAL 24 HOUR)764 date_utc >= NOW() 804 765 LIMIT 5000 805 " ); 806 807 foreach ( $raw_events as $event ) { 808 $chunked_db_events[ $event->meetup_url ][] = $event; 809 } 810 811 $meetup_client = $this->get_meetup_client(); 812 if ( ! empty( $meetup_client->error->errors ) ) { 813 $this->log( 'Failed to instantiate meetup client: ' . wp_json_encode( $meetup_client->error ), true ); 814 return; 815 } 816 817 $groups = $meetup_client->get_groups(); 818 if ( ! empty( $meetup_client->error->errors ) ) { 819 $this->log( 'Failed to fetch groups: ' . wp_json_encode( $meetup_client->error ), true ); 820 return; 821 } 822 $group_urlnames = wp_list_pluck( $groups, 'urlname' ); 823 824 foreach ( $chunked_db_events as $group_url => $db_events ) { 825 $url_name = trim( wp_parse_url( $group_url, PHP_URL_PATH ), '/' ); 826 827 if ( ! in_array( $url_name, $group_urlnames, true ) ) { 828 // The group doesn't exist anymore, mark its events as deleted. 829 foreach ( $db_events as $db_event ) { 830 $wpdb->update( self::EVENTS_TABLE, array( 'status' => 'deleted' ), array( 'id' => $db_event->id ) ); 831 832 $this->log( "Group missing. Marked {$db_event->source_id} as deleted." ); 833 } 834 835 continue; 836 } 837 838 $events = $meetup_client->get_group_events( 839 $url_name, 840 array( 841 'status' => 'upcoming,cancelled', 842 ) 843 ); 844 845 // Make sure we have a valid API response, to avoid marking events as deleted just because the request failed. 846 if ( is_wp_error( $events ) ) { 847 $breaking_error_codes = array( 'invalid_grant', 'auth_fail' ); 848 if ( in_array( $events->get_error_code(), $breaking_error_codes, true ) ) { 849 $this->log( 850 sprintf( 851 'Failed to check for deleted meetup events: %s', 852 esc_html( $events->get_error_message() ) 853 ), 854 true 855 ); 856 break; 857 } 858 859 continue; 860 } 861 862 $api_events = wp_list_pluck( $events, 'id' ); 863 864 foreach ( $db_events as $db_event ) { 865 // If the event is still appearing in the Meetup.com API results, it hasn't been deleted. 866 if ( in_array( $db_event->source_id, $api_events, true ) ) { 867 continue; 868 } 869 870 // The event is missing from a valid response, so assume that it's been deleted. 871 $wpdb->update( self::EVENTS_TABLE, array( 'status' => 'deleted' ), array( 'id' => $db_event->id ) ); 872 873 $this->log( "Event missing. Marked {$db_event->source_id} as deleted." ); 874 } 766 ", ARRAY_A ); 767 768 $events = array_column( $raw_events, 'source_id', 'id' ); // [ id, source ], [ id, source ] => [ id => source, id => source ] 769 $event_statuses = $meetup_client->get_events_status( $events ); 770 771 foreach ( $event_statuses as $id => $status ) { 772 if ( ! $status ) { 773 $wpdb->update( 774 self::EVENTS_TABLE, 775 array( 'status' => 'deleted' ), 776 array( 'id' => $id ) 777 ); 778 $this->log( "Event missing. Marked DB ID {$id} as deleted." ); 779 } 875 780 } 876 781 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)