/** * Performs de-population of model :) * * @param object The base object to save * @param string The message to display if successful * @return bool */ protected function formDelete(&$object, $deleteMessage = NULL, $deleteEvents = array()) { // Delete data and all relations try { // Bring out the Gimp. $conn = Doctrine_Manager::connection(); $conn->beginTransaction(); $this->delete_prepare($object); // Allow plugins to process any data related to this object prior to deletion if (!plugins::delete($this, $deleteEvents)) { throw new Bluebox_Exception('Plugins failed to delete'); } $this->pre_delete($object); // Delete this base record $object->delete(); $conn->commit(); $this->post_delete($object); // Success - optionally set a delete message if (is_null($deleteMessage)) { $displayName = inflector::humanizeModelName(get_class($object)); message::set($displayName . ' removed!', array('type' => 'success')); } else { if (!empty($deleteMessage)) { message::set($deleteMessage, array('type' => 'success')); } } $this->delete_succeeded($object); return TRUE; } catch (Doctrine_Connection_Exception $e) { message::set('Doctrine error: ' . $e->getMessage()); } catch (Bluebox_Exception $e) { message::set('Please correct the errors listed below.'); kohana::log('alert', $e->getMessage()); } catch (Exception $e) { message::set($e->getMessage()); } if ($conn) { $conn->rollback(); } $this->delete_failed($object); return FALSE; }
/** * This function preforms the default restful delete, * extend this class and redefine if you need different behavoir. * * @return void */ public function restfulDelete() { $errorOccured = FALSE; kohana::log('debug', 'Attempting a RESTful delete'); if (empty($_POST['id'])) { message::set('No rows where specified for delete', array('type' => 'alert')); return; } $delIDs = explode(',', $_POST['id']); $conn = Doctrine_Manager::connection(); foreach ($delIDs as $delID) { $row = Doctrine::getTable($this->baseModel)->find($delID); if (!$row) { $errorOccured = TRUE; message::set('Unable to locate row ' . strtolower($this->baseModel) . ' id ' . $delID . '!'); continue; } try { Bluebox_Record::setBaseSaveObject($row); $conn->beginTransaction(); plugins::delete($row); $row->delete(); $conn->commit(); plugins::delete($row, array('custom' => Router::$controller . '.success', 'coreAction' => FALSE, 'core' => FALSE)); Bluebox_Record::setBaseSaveObject(NULL); } catch (Exception $e) { $errorOccured = TRUE; message::set('Unable to delete ' . strtolower($this->baseModel) . ' id ' . $delID . '! ' . $e->getMessage()); } } if (empty($errorOccured)) { message::set('Selected record(s) deleted.', array('type' => 'success')); } }