コード例 #1
0
 /**
  * Moves tickets to a new ticket type.
  *
  * The target ticket type *must* belong to the same provider as the tickets being
  * moved (ie, you cannot move RSVP tickets to a WooCommerce ticket type, nor can
  * a mix of RSVP and WooCommerce tickets be moved to a new ticket type).
  *
  * @param array $ticket_ids
  * @param int   $tgt_ticket_type_id
  * @param int   $src_event_id
  * @param int   $tgt_event_id
  *
  * @return int number of successfully moved tickets (zero upon failure to move any)
  */
 public function move_tickets(array $ticket_ids, $tgt_ticket_type_id, $src_event_id, $tgt_event_id)
 {
     $ticket_ids = array_map('intval', $ticket_ids);
     $instigator_id = get_current_user_id();
     $ticket_type = Tribe__Tickets__Tickets::load_ticket_object($tgt_ticket_type_id);
     $successful_moves = 0;
     if (!$ticket_type) {
         return 0;
     }
     $ticket_objects = array();
     $providers = array();
     foreach (Tribe__Tickets__Tickets::get_event_attendees($src_event_id) as $issued_ticket) {
         if (in_array(absint($issued_ticket['attendee_id']), $ticket_ids)) {
             $ticket_objects[] = $issued_ticket;
             $providers[$issued_ticket['provider']] = true;
         }
     }
     // We expect to have found as many tickets as were specified
     if (count($ticket_objects) !== count($ticket_ids)) {
         return 0;
     }
     // Check that the tickets are homogenous in relation to the ticket provider
     if (1 !== count($providers)) {
         return 0;
     }
     $provider_class = key($providers);
     $ticket_type_key = constant($provider_class . '::ATTENDEE_PRODUCT_KEY');
     $ticket_event_key = constant($provider_class . '::ATTENDEE_EVENT_KEY');
     if (empty($ticket_type_key) || empty($ticket_event_key)) {
         return 0;
     }
     foreach ($ticket_objects as $single_ticket) {
         $ticket_id = $single_ticket['attendee_id'];
         $src_ticket_type_id = get_post_meta($ticket_id, $ticket_type_key, true);
         /**
          * Fires immediately before a ticket is moved.
          *
          * @param int $ticket_type_id
          * @param int $tgt_ticket_type_id
          * @param int $tgt_event_id
          * @param int $instigator_id
          */
         do_action('tribe_tickets_ticket_before_move', $ticket_id, $tgt_ticket_type_id, $tgt_event_id, $instigator_id);
         update_post_meta($ticket_id, $ticket_type_key, $tgt_ticket_type_id);
         update_post_meta($ticket_id, $ticket_event_key, $tgt_event_id);
         $history_message = sprintf(__('This ticket was moved to %1$s %2$s from %3$s %4$s', 'event-tickets'), '<a href="' . esc_url(get_the_permalink($tgt_event_id)) . '" target="_blank">' . get_the_title($tgt_event_id) . '</a>', '<a href="' . esc_url(get_the_permalink($tgt_ticket_type_id)) . '" target="_blank">(' . get_the_title($tgt_ticket_type_id) . ')</a>', '<a href="' . esc_url(get_the_permalink($src_event_id)) . '" target="_blank">' . get_the_title($src_event_id) . '</a>', '<a href="' . esc_url(get_the_permalink($src_ticket_type_id)) . '" target="_blank">(' . get_the_title($src_ticket_type_id) . ')</a>');
         $history_data = array('ticket_ids' => $ticket_ids, 'src_event_id' => $src_event_id, 'tgt_event_id' => $tgt_event_id, 'tgt_ticket_type_id' => $tgt_ticket_type_id);
         Tribe__Post_History::load($ticket_id)->add_entry($history_message, $history_data);
         /**
          * Fires when a ticket is relocated from ticket type to another, which may be in
          * a different post altogether.
          *
          * @param int $ticket_id                the ticket which has been moved
          * @param int $src_ticket_type_id  the ticket type it belonged to originally
          * @param int $tgt_ticket_type_id       the ticket type it now belongs to
          * @param int $src_event_id             the event/post which the ticket originally belonged to
          * @param int $tgt_event_id             the event/post which the ticket now belongs to
          * @param int $instigator_id            the user who initiated the change
          */
         do_action('tribe_tickets_ticket_moved', $ticket_id, $src_ticket_type_id, $tgt_ticket_type_id, $src_event_id, $tgt_event_id, $instigator_id);
         $successful_moves++;
     }
     /**
      * Fires when all of the specified ticket IDs have been moved
      *
      * @param array $ticket_ids          each ticket ID
      * @param int   $tgt_ticket_type_id  the ticket type they were moved to
      * @param int   $src_event_id        the event they belonged to prior to the move
      * @param int   $tgt_event_id        the event they belong to after the move
      */
     do_action('tribe_tickets_all_tickets_moved', $ticket_ids, $tgt_ticket_type_id, $src_event_id, $tgt_event_id);
     return $successful_moves;
 }