/** * Disconnect any existing exceptions. * * @param boolean $delete If true, disconnected exceptions will be deleted * completely. */ public function disconnectExceptions($delete = false) { // Get exceptions that we have bound events for. $exceptions = $this->boundExceptions(); // Remove all exception dates from the recurrence object. $ex_dates = $this->recurrence->getExceptions(); foreach ($ex_dates as $ex_date) { list($year, $month, $day) = sscanf($ex_date, '%04d%02d%02d'); $this->recurrence->deleteException($year, $month, $day); } // Unbind the event from the base event, but don't delete it to avoid // any unpleasent user surprises. foreach ($exceptions as $exception) { $exception->baseid = null; $exception->exceptionoriginaldate = null; $exception->save(); // Must delete after the baseid was removed so it doesn't alter // the old base event's history. if ($delete) { $this->getDriver()->deleteEvent($exception, true); } } }