Initial release of Eventbrite for The Events Calendar (v1.0.0)
Bidirectional sync between Eventbrite and The Events Calendar, with WooCommerce ticket purchasing that bypasses Eventbrite's processing fees by registering buyers as free attendees via API. Includes venue/ organizer sync, QR code ticket generation, attendee management with CSV export, scheduled sync via WP-Cron, and real-time Eventbrite webhooks.
This commit is contained in:
commit
f3bc795d9a
15 changed files with 3132 additions and 0 deletions
77
includes/class-eb4tec-qr-code.php
Normal file
77
includes/class-eb4tec-qr-code.php
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
final class EB4TEC_QR_Code {
|
||||
|
||||
public function generate( string $data, int $size = 0 ): string|WP_Error {
|
||||
if ( $size <= 0 ) {
|
||||
$size = (int) get_option( 'eb4tec_qr_size', 200 );
|
||||
}
|
||||
|
||||
$hash = md5( $data );
|
||||
$uploads = wp_upload_dir();
|
||||
$dir = trailingslashit( $uploads['basedir'] ) . 'eb4tec-qr/';
|
||||
$file = $dir . $hash . '.png';
|
||||
$url = trailingslashit( $uploads['baseurl'] ) . 'eb4tec-qr/' . $hash . '.png';
|
||||
|
||||
if ( file_exists( $file ) ) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
// Create directory if needed.
|
||||
if ( ! wp_mkdir_p( $dir ) ) {
|
||||
return new WP_Error( 'eb4tec_qr_dir', __( 'Could not create QR code directory.', 'eb4tec' ) );
|
||||
}
|
||||
|
||||
// Fetch from Google Chart API (no API key required for QR endpoint).
|
||||
$api_url = add_query_arg( [
|
||||
'cht' => 'qr',
|
||||
'chs' => "{$size}x{$size}",
|
||||
'chl' => rawurlencode( $data ),
|
||||
'choe' => 'UTF-8',
|
||||
], 'https://chart.googleapis.com/chart' );
|
||||
|
||||
$response = wp_remote_get( $api_url, [ 'timeout' => 15 ] );
|
||||
|
||||
if ( is_wp_error( $response ) ) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$code = wp_remote_retrieve_response_code( $response );
|
||||
if ( $code !== 200 ) {
|
||||
return new WP_Error( 'eb4tec_qr_fetch', __( 'QR code generation failed.', 'eb4tec' ), [ 'status' => $code ] );
|
||||
}
|
||||
|
||||
$body = wp_remote_retrieve_body( $response );
|
||||
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_file_put_contents
|
||||
if ( false === file_put_contents( $file, $body ) ) {
|
||||
return new WP_Error( 'eb4tec_qr_write', __( 'Could not save QR code image.', 'eb4tec' ) );
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
public function get_attendee_qr_data( string $attendee_id, string $order_id, string $event_id ): string {
|
||||
return "EB4TEC:{$attendee_id}:{$order_id}:{$event_id}";
|
||||
}
|
||||
|
||||
public function render_qr_html( string $url, string $attendee_id = '', int $size = 0 ): string {
|
||||
if ( $size <= 0 ) {
|
||||
$size = (int) get_option( 'eb4tec_qr_size', 200 );
|
||||
}
|
||||
|
||||
$alt = $attendee_id
|
||||
? sprintf( __( 'Ticket QR code for attendee %s', 'eb4tec' ), esc_attr( $attendee_id ) )
|
||||
: __( 'Ticket QR code', 'eb4tec' );
|
||||
|
||||
return sprintf(
|
||||
'<img src="%s" alt="%s" width="%d" height="%d" class="eb4tec-qr-code" style="display:block;margin:8px 0;">',
|
||||
esc_url( $url ),
|
||||
esc_attr( $alt ),
|
||||
$size,
|
||||
$size
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue