File Editor
Directories:
.. (Back)
Admin
Email
JSON_LD
Files:
Assets.php
Dispatcher.php
Email_Abstract.php
Email_Handler.php
Email_Template.php
Hooks.php
Legacy_Hijack.php
Provider.php
Web_View.php
Create New File
Create
Edit File: Legacy_Hijack.php
<?php namespace TEC\Tickets\Emails; use Tribe__Tickets__Tickets as Tickets_Module; /** * Class Legacy_Hijack. * * Mostly used to take over legacy methods of sending emails and using the new ones.w * * @since 5.6.0 * * @package TEC\Tickets\Emails */ class Legacy_Hijack { /** * Send RSVPs/tickets email for an attendee by injecting itself into the legacy Tickets codebase. * * @since 5.6.0 * * @param null|boolean $pre Previous value from the filter, mostly will be null. * @param string $to The email to send the tickets to. * @param array $tickets The list of tickets to send. * @param array $args { * The list of arguments to use for sending ticket emails. * * @type string $subject The email subject. * @type string $content The email content. * @type string $from_name The name to send tickets from. * @type string $from_email The email to send tickets from. * @type array|string $headers The list of headers to send. * @type array $attachments The list of attachments to send. * @type string $provider The provider slug (rsvp, tpp, woo, edd). * @type int $post_id The post/event ID to send the emails for. * @type string|int $order_id The order ID to send the emails for. * } * * @param Tickets_Module $module Commerce module we are using for these emails. * * @return null|boolean When we return boolean we disable the legacy emails regardless of status of this email, null lets the old emails trigger. */ public function send_tickets_email_for_attendee( $pre, $to, $tickets, $args = [], $module = null ): ?bool { // Only send back to the old email in case people opted-out of the Tickets Emails feature. if ( ! tec_tickets_emails_is_enabled() ) { return null; } if ( ! $module instanceof Tickets_Module ) { return false; } // If no tickets to send for, do not send email. if ( empty( $tickets ) ) { return false; } $sent = false; $defaults = [ 'provider' => 'ticket', 'post_id' => 0, 'order_id' => '', 'order_status' => '', ]; // Set up the default arguments. $args = wp_parse_args( $args, $defaults ); $provider = $args['provider']; $post_id = $args['post_id']; $order_id = $args['order_id']; $is_rsvp = 'rsvp' === $provider || ( is_object( $provider ) && 'Tribe__Tickets__RSVP' === get_class( $provider ) ); if ( $is_rsvp ) { if ( 'no' !== strtolower( $args['order_status'] ) ) { $email_class = tribe( Email\RSVP::class ); $use_ticket_email = tribe_get_option( $email_class->get_option_key( 'use-ticket-email' ), false ); if ( ! empty( $use_ticket_email ) ) { $email_class = tribe( Email\Ticket::class ); } } else { $email_class = tribe( Email\RSVP_Not_Going::class ); } } else { $email_class = tribe( Email\Ticket::class ); } if ( ! $email_class->is_enabled() ) { return false; } // Filter the array so that we have a list of tickets by event. $tickets_by_event = []; foreach ( $tickets as $ticket ) { $event_id = $ticket['event_id']; // @todo: check what happens with tickets from posts/pages. if ( ! isset( $tickets_by_event[ $event_id ] ) ) { $tickets_by_event[ $event_id ] = []; } $tickets_by_event[ $event_id ][] = $ticket; } // loop the tickets by event and send one email for each event. foreach ( $tickets_by_event as $event_id => $event_tickets ) { $email_class->set( 'post_id', $event_id ); $email_class->set( 'tickets', $event_tickets ); $email_class->recipient = $to; $sent = $email_class->send(); // Handle marking the attendee ticket email as being sent. if ( $sent ) { // Mark attendee ticket email as being sent for each attendee ticket. foreach ( $event_tickets as $attendee ) { $module->update_ticket_sent_counter( $attendee['attendee_id'] ); $module->update_attendee_activity_log( $attendee['attendee_id'], [ 'type' => 'email', 'name' => $attendee['holder_name'], 'email' => $attendee['holder_email'], ] ); } } else { break; } } return $sent; } /** * Dispatches a confirmation email that acknowledges the user has RSVP'd * including the tickets. * * @since 5.6.0 * * @param null|boolean $pre Previous value from the filter, mostly will be null. * @param int $order_id The order ID. * @param int $event_id The event ID. * @param Tickets_Module $module Commerce module we are using for these emails. * * @return null|boolean When we return boolean we disable the legacy emails regardless of status of this email, null lets the old emails trigger. */ public function send_rsvp_email( $pre, $order_id, $event_id = null, $module = null ): ?bool { // Only send back to the old email in case people opted-out of the Tickets Emails feature. if ( ! tec_tickets_emails_is_enabled() ) { return null; } if ( ! $module instanceof Tickets_Module ) { return false; } $all_attendees = $module->get_attendees_by_order_id( $order_id ); $to_send = []; if ( empty( $all_attendees ) ) { return false; } // Look at each attendee and check if a ticket was sent: in each case where a ticket // has not yet been sent we should a) send the ticket out by email and b) record the // fact it was sent. foreach ( $all_attendees as $single_attendee ) { // Do not add those attendees/tickets marked as not attending (note that despite the name // 'qr_ticket_id', this key is not QR code specific, it's simply the attendee post ID). $going_status = get_post_meta( $single_attendee['qr_ticket_id'], $module::ATTENDEE_RSVP_KEY, true ); if ( in_array( $going_status, $module->get_statuses_by_action( 'count_not_going' ), true ) ) { continue; } // Only add those attendees/tickets that haven't already been sent. if ( empty( $single_attendee['ticket_sent'] ) ) { $to_send[] = $single_attendee; } } /** * Controls the list of tickets which will be emailed out. * * @param array $to_send list of tickets to be sent out by email * @param array $all_attendees list of all attendees/tickets, including those already sent out * @param int $order_id */ $to_send = (array) apply_filters( 'tribe_tickets_rsvp_tickets_to_send', $to_send, $all_attendees, $order_id ); if ( empty( $to_send ) ) { return false; } // For now all ticket holders in an order share the same email. $to = $all_attendees['0']['holder_email']; if ( ! is_email( $to ) ) { return false; } $email_class = tribe( Email\RSVP::class ); if ( ! $email_class->is_enabled() ) { return false; } $use_ticket_email = tribe_get_option( $email_class->get_option_key( 'use-ticket-email' ), false ); if ( ! empty( $use_ticket_email ) ) { $email_class = tribe( Email\Ticket::class ); } $email_class->set( 'post_id', $event_id ); $email_class->set( 'tickets', $all_attendees ); // @todo we need to avoid setting the recipient like this. $email_class->recipient = $to; $sent = $email_class->send(); if ( $sent ) { foreach ( $all_attendees as $attendee ) { $module->update_ticket_sent_counter( $attendee['qr_ticket_id'] ); $module->update_attendee_activity_log( $attendee['attendee_id'], [ 'type' => 'email', 'name' => $attendee['holder_name'], 'email' => $attendee['holder_email'], ] ); } } return $sent; } /** * Dispatches a confirmation email that acknowledges the user has RSVP'd * in cases where they have indicated that they will *not* be attending. * * @since 5.6.0 * * @param null|boolean $pre Previous value from the filter, mostly will be null. * @param int $order_id The order ID. * @param int $event_id The event ID. * @param Tickets_Module $module Commerce module we are using for these emails. * * @return bool Whether the email was sent or not. */ public function send_rsvp_non_attendance_confirmation( $pre, $order_id, $event_id, $module ) { // Only send back to the old email in case people opted-out of the Tickets Emails feature. if ( ! tec_tickets_emails_is_enabled() ) { return null; } if ( ! $module instanceof Tickets_Module ) { return false; } $attendees = $module->get_attendees_by_order_id( $order_id ); if ( empty( $attendees ) ) { return false; } // For now all ticket holders in an order share the same email. $to = $attendees['0']['holder_email']; if ( ! is_email( $to ) ) { return false; } $email_class = tribe( Email\RSVP_Not_Going::class ); $email_class->set( 'post_id', $event_id ); $email_class->set( 'tickets', $attendees ); $email_class->recipient = $to; $sent = $email_class->send(); return $sent; } }
Save Changes
Rename File
Rename