/** * * @access protected * @param \EE_Ticket $ticket * @param \EE_Datetime[] $saved_datetimes * @param \EE_Datetime[] $added_datetimes * @param \EE_Datetime[] $removed_datetimes * @return \EE_Ticket * @throws \EE_Error */ protected function _update_ticket_datetimes(EE_Ticket $ticket, $saved_datetimes = array(), $added_datetimes = array(), $removed_datetimes = array()) { // to start we have to add the ticket to all the datetimes its supposed to be with, // and removing the ticket from datetimes it got removed from. // first let's add datetimes if (!empty($added_datetimes) && is_array($added_datetimes)) { foreach ($added_datetimes as $row_id) { $row_id = (int) $row_id; if (isset($saved_datetimes[$row_id]) && $saved_datetimes[$row_id] instanceof EE_Datetime) { $ticket->_add_relation_to($saved_datetimes[$row_id], 'Datetime'); // Is this an existing ticket (has an ID) and does it have any sold? // If so, then we need to add that to the DTT sold because this DTT is getting added. if ($ticket->ID() && $ticket->sold() > 0) { $saved_datetimes[$row_id]->increase_sold($ticket->sold()); $saved_datetimes[$row_id]->save(); } } } } // then remove datetimes if (!empty($removed_datetimes) && is_array($removed_datetimes)) { foreach ($removed_datetimes as $row_id) { $row_id = (int) $row_id; // its entirely possible that a datetime got deleted (instead of just removed from relationship. // So make sure we skip over this if the dtt isn't in the $saved_datetimes array) if (isset($saved_datetimes[$row_id]) && $saved_datetimes[$row_id] instanceof EE_Datetime) { $ticket->_remove_relation_to($saved_datetimes[$row_id], 'Datetime'); // Is this an existing ticket (has an ID) and does it have any sold? // If so, then we need to remove it's sold from the DTT_sold. if ($ticket->ID() && $ticket->sold() > 0) { $saved_datetimes[$row_id]->decrease_sold($ticket->sold()); $saved_datetimes[$row_id]->save(); } } } } // cap ticket qty by datetime reg limits $ticket->set_qty(min($ticket->qty(), $ticket->qty('reg_limit'))); return $ticket; }